首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Base* p= new(buf) Base的含义是什么?

Base* p= new(buf) Base的含义是什么?
EN

Stack Overflow用户
提问于 2015-06-30 16:08:19
回答 1查看 247关注 0票数 0

最近,我遇到了一些C++代码,这些代码被认为是用来说明可能在val差中捕获的许多不同类型的错误,gdb、保险等等。

其中一个例子如下:

代码语言:javascript
复制
// =============================================================================
// 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;
}

我的问题与这句话有关:

代码语言:javascript
复制
Base* p = new(buf) Base;

我以前从未见过这种语法,在谷歌上搜索了很多次之后,我甚至不知道在找到解释时应该搜索什么。

谁能给我指明正确的方向?如果这是多余的或简单的,我很抱歉,但是我很好奇在这个例子中发生了什么。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-30 16:12:24

是安置-新的。它调用已经分配的内存块的构造函数。

正常情况下,新公司履行两个职能:

  • 为对象分配内存
  • 通过初始化将该内存转换为对象

安置-新的只是做第二位。

它在stl分配器实现中使用了很多。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31143230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档