定位new表达式

xiaoxiao2021-02-28  82

在cpp中,new主要有3种用法:实例化一个对象;实例化一个数组;定位new表达式。在这里主要讨论第三种用法,定位new表达式 定位new表达式是在已分配内存空间中调用构造函数初始化一个对象。


new(空间地址)类型名;new(空间地址)类型名(初始化列表); 详情见代码: #include<iostream> using namespace std; class Array { public: Array(size_t size = 10) :_size(size), _a(nullptr) { cout << "构造" << endl; if (_size > 0) { _a = new int[_size]; } } ~Array() { cout << "析构" << endl; if (_a) { delete[]_a; _a = nullptr; _size = 0; } } private: int *_a; size_t _size; }; int main() { //用定位new 和malloc free模拟new和delete Array* p1 = (Array*)malloc(sizeof(Array)); new(p1)Array(100); p1->~Array(); free(p1); //用定位new和malloc free模拟new[]和delete[]; Array* p2 = (Array*)malloc(sizeof(Array)* 10); for (size_t i = 0; i < 10; i++) { new(p2 + i)Array(15); } for (size_t i = 0; i < 10; i++) { p2[i].~Array(); } free(p2); system("pause"); }

拓展学习: http://www.cnblogs.com/weiweiqiao99/archive/2012/06/16/2545710.html

转载请注明原文地址: https://www.6miu.com/read-48578.html

最新回复(0)