C++中NEW是啥意思呢.急需

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中NEW是啥意思呢.急需相关的知识,希望对你有一定的参考价值。

c++ 中NEW是一个操作符,也就意味着NEW是个关键字,而操作符也就意味着是内置在编译器内部的。

NEW用来生成某种类型的一个对象,就是楼上说的实例化一个对象,通常这个对象是在堆中生成,相应NEW的是DELETE用来销毁一个已生成的对象以释放堆空间。NEW和DELETE在C++中编译器会自己管理的,而不象C中的MALLOC和FREE要自己进行一些管理工作,如:检查分配成功与否。
参考技术A 申请一个内存空间。
Array arr=new Array;
就是申请个数组空间的意思。谢谢!
参考技术B New是新分配一个内存空间,与之相反的是delete. 参考技术C 动态存储
一般和delete一起使用
参考技术D 实例化一个对象。

Base* p = new(buf) Base是啥意思; [复制]

【中文标题】Base* p = new(buf) Base是啥意思; [复制]【英文标题】:What is the meaning of Base* p = new(buf) Base; [duplicate]Base* p = new(buf) Base是什么意思; [复制] 【发布时间】: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 【参考方案1】:

这是新的展示位置。它在已分配的内存块上调用构造函数。

通常 new 执行 2 个功能:

为对象分配内存

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

placement-new 只做第二位。

它在 stl 分配器实现中被大量使用。

【讨论】:

现在明白了,谢谢。

以上是关于C++中NEW是啥意思呢.急需的主要内容,如果未能解决你的问题,请参考以下文章

Base* p = new(buf) Base是啥意思; [复制]

求以英语高手询问mid-rails 是啥意思,急需,谢谢!

在C++种,关于指针的这两种表示有啥区别:double * a和double ** a?两个**是啥意思呢?

boosting是啥意思?

JAVA中文是啥意思

托管和非托管的c++是啥意思,有啥区别?