Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 明确调用“不一致”;建造商;和析构函数_C++_Raii - Fatal编程技术网

C++ 明确调用“不一致”;建造商;和析构函数

C++ 明确调用“不一致”;建造商;和析构函数,c++,raii,C++,Raii,对象的创建包括:a)获取内存(在堆栈或堆上,operator new处理后者);b) 初始化它(调用构造函数)。很可能是毁灭 如果我们想在创建过程中跳过a),也就是说,在我们已经获得的内存中构造一个对象,我们可以使用placementnew 如果我们想在不释放内存的情况下销毁一个对象,我们显式地调用析构函数 但是,构造函数和析构函数是一对函数,new和delete是一对运算符 那么,为什么不使用placementnew和“placementdelete”(您可以想象),或者显式调用构造函数和析构

对象的创建包括:a)获取内存(在堆栈或堆上,
operator new
处理后者);b) 初始化它(调用构造函数)。很可能是毁灭

如果我们想在创建过程中跳过a),也就是说,在我们已经获得的内存中构造一个对象,我们可以使用placement
new

如果我们想在不释放内存的情况下销毁一个对象,我们显式地调用析构函数

但是,构造函数和析构函数是一对函数,
new
delete
是一对运算符


那么,为什么不使用placement
new
和“placement
delete
”(您可以想象),或者显式调用构造函数和析构函数?这种不一致的意图是什么?

您不需要使用
new
(放置与否)来“获取对象的内存”。将对象定义为一个简单变量就足够了。placement
new
不会分配内存,这不是不一致,而是它应该做的。它可以有一个不同的名称,但关键字是相当“昂贵的”,它实际上是一个更深层次的不一致。我们可以定义使用placement语法的operator new版本。但是没有相应的方法调用相应的运算符delete。您不需要使用
new
(放置与否)来“获取对象的内存”。将对象定义为一个简单变量就足够了。placement
new
不会分配内存,这不是不一致,而是它应该做的。它可以有一个不同的名称,但关键字是相当“昂贵的”,它实际上是一个更深层次的不一致。我们可以定义使用placement语法的operator new版本。但是没有相应的方法调用相应的操作符delete。