C++ 明确调用“不一致”;建造商;和析构函数
对象的创建包括:a)获取内存(在堆栈或堆上,C++ 明确调用“不一致”;建造商;和析构函数,c++,raii,C++,Raii,对象的创建包括:a)获取内存(在堆栈或堆上,operator new处理后者);b) 初始化它(调用构造函数)。很可能是毁灭 如果我们想在创建过程中跳过a),也就是说,在我们已经获得的内存中构造一个对象,我们可以使用placementnew 如果我们想在不释放内存的情况下销毁一个对象,我们显式地调用析构函数 但是,构造函数和析构函数是一对函数,new和delete是一对运算符 那么,为什么不使用placementnew和“placementdelete”(您可以想象),或者显式调用构造函数和析构
operator new
处理后者);b) 初始化它(调用构造函数)。很可能是毁灭
如果我们想在创建过程中跳过a),也就是说,在我们已经获得的内存中构造一个对象,我们可以使用placementnew
如果我们想在不释放内存的情况下销毁一个对象,我们显式地调用析构函数
但是,构造函数和析构函数是一对函数,new
和delete
是一对运算符
那么,为什么不使用placement
new
和“placementdelete
”(您可以想象),或者显式调用构造函数和析构函数?这种不一致的意图是什么?您不需要使用new
(放置与否)来“获取对象的内存”。将对象定义为一个简单变量就足够了。placementnew
不会分配内存,这不是不一致,而是它应该做的。它可以有一个不同的名称,但关键字是相当“昂贵的”,它实际上是一个更深层次的不一致。我们可以定义使用placement语法的operator new版本。但是没有相应的方法调用相应的运算符delete。您不需要使用new
(放置与否)来“获取对象的内存”。将对象定义为一个简单变量就足够了。placementnew
不会分配内存,这不是不一致,而是它应该做的。它可以有一个不同的名称,但关键字是相当“昂贵的”,它实际上是一个更深层次的不一致。我们可以定义使用placement语法的operator new版本。但是没有相应的方法调用相应的操作符delete。