最近,我遇到了一些C++代码,这些代码被认为是用来说明可能在val差中捕获的许多不同类型的错误,gdb、保险等等。
其中一个例子如下:
// =============================================================================
// A base class without a virtual destructor
class Base
{
public:
~Base() { std::cout << "Base" << std::endl; }
};
// Derived should not be deleted through Base*
class Derived : public Base
{
public:
~Derived() { std::cout << "Derived" << std::endl; }
};
// A class that isn't Base
class NotBase
{
public:
~NotBase() { std::cout << "NotBase" << std::endl; }
};
// =============================================================================
// Wrong delete is called. Should call ~Base, then
// delete[] buf
void placement_new()
{
char* buf = new char[sizeof(Base)];
Base* p = new(buf) Base;
delete p;
}我的问题与这句话有关:
Base* p = new(buf) Base;我以前从未见过这种语法,在谷歌上搜索了很多次之后,我甚至不知道在找到解释时应该搜索什么。
谁能给我指明正确的方向?如果这是多余的或简单的,我很抱歉,但是我很好奇在这个例子中发生了什么。
谢谢。
发布于 2015-06-30 16:12:24
是安置-新的。它调用已经分配的内存块的构造函数。
正常情况下,新公司履行两个职能:
安置-新的只是做第二位。
它在stl分配器实现中使用了很多。
https://stackoverflow.com/questions/31143230
复制相似问题