【发布时间】:2015-09-17 13:01:21
【问题描述】:
我最近遇到了一些 C++ 代码,这些代码旨在说明可能在 valgrind、gdb、insure 等中捕获的许多不同类型的错误......
其中一个例子如下:
// =============================================================================
// 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;
我在谷歌搜索前后从未见过这种语法,我什至不知道在寻找解释时要搜索什么。
谁能指出我正确的方向?非常抱歉,如果这是多余或简单的,但我很好奇这个例子中发生了什么。
谢谢。
【问题讨论】:
-
查找“新展示位置”。
-
查找
new通常可能会将您带到en.cppreference.com/w/cpp/language/new