【发布时间】:2014-12-27 01:04:20
【问题描述】:
今天我在阅读一些源代码时遇到了这个
Pool<C> *pool = accomodate_component<C>();
new(pool->get(id.index())) C(std::forward<Args>(args) ...);
这句话让我很困惑
new(pool->get(id.index())) C(std::forward<Args>(args) ...);
我什至不认为它是合法的 C++。事实证明,pool->get(id.index()) 返回的大小告诉我可以明确告诉 C++ 它应该分配多少大小。
我查了一下,是的,它是这样定义的 void* operator new ( std::size_t count );
现在我知道这是合法的 C++,但我不知道它的用途。
我为什么要打电话给new(size) Foo();。这不应该是内存泄漏吗?这不是完全没有意义吗?如果我没有 ptr,我将如何访问它?
【问题讨论】:
-
它的位置是新的。他们不存储指针,因为他们知道放置对象的位置。这种形式的 new 实际上并不分配内存
标签: c++ c++11 placement-new