Base*p=新(buf)Base的含义是什么; 我最近遇到了一些C++代码,它可以说明在ValGRND、GDB、保险等中可能会遇到的许多不同类型的错误,以及……
其中一个例子如下:Base*p=新(buf)Base的含义是什么; 我最近遇到了一些C++代码,它可以说明在ValGRND、GDB、保险等中可能会遇到的许多不同类型的错误,以及……,c++,valgrind,C++,Valgrind,其中一个例子如下: // ============================================================================= // A base class without a virtual destructor class Base { public: ~Base() { std::cout << "Base" << std::endl; } }; // Derived should n
// =============================================================================
// 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;
}
我从来没有见过这种语法,在谷歌搜索了很多次之后,我甚至不知道在寻找解释时应该搜索什么
谁能给我指出正确的方向吗?如果这是多余的或简单的,我深表歉意,但我很好奇在这个例子中发生了什么
谢谢。这是新的。它在已经分配的内存块上调用构造函数 通常情况下,new执行两项功能:
- 为对象分配内存
- 通过初始化将内存转换为对象
它在stl分配器实现中被大量使用。它是新的。它在已经分配的内存块上调用构造函数 通常情况下,new执行两项功能:
- 为对象分配内存
- 通过初始化将内存转换为对象
它在stl分配器实现中被大量使用。它是新的。它在已经分配的内存块上调用构造函数 通常情况下,new执行两项功能:
- 为对象分配内存
- 通过初始化将内存转换为对象
它在stl分配器实现中被大量使用。它是新的。它在已经分配的内存块上调用构造函数 通常情况下,new执行两项功能:
- 为对象分配内存
- 通过初始化将内存转换为对象
它在stl分配器实现中被大量使用。查找“placement new”。一般而言,查找
new
可能会导致您查找“placement new”。一般而言,查找new
可能会导致您查找“placement new”。一般而言,查找new
可能会导致您查找“placement new”.一般来说,查找new
可能会使您现在有意义,谢谢。现在有意义,谢谢。现在有意义,谢谢。现在有意义,谢谢。现在有意义,谢谢。
Base* p = new(buf) Base;