问题描述
解决方案
placement new
3.1 有时候你真的会想直接调用一个构造函数,针对一个已经存在的对象调用其构造函数,并无意义,因为构造函数用来对象初始化,而对象只能初始化一次。但是你偶尔会有一些分配好的原始内存,你需要在上面构建对象,有一个特殊的地方 operator new 称为placement new,允许这么做。
例如:
class Widget { public: Widget(int widgetSize); ...... };
Widget* constructWidgetInBuffer(void*buffer,int size) { return new (buffer) Widget(size); }
此函数返回指针,指向一个Widget object,它被构造于传递给此函数的一块内存缓存区上。当程序运行到共享内存或者内存I/O映射。这类函数可能是有用的,因为在那样运用中,对象必须置于特定的地址,或者置于特殊函数分配出来的内存上。
解决方案二:
new操作符
解决方案三:
第二行是用buffer指向了 s 的首地址
第三行是创建一个string对象,对象中的属性值是“Hi”放入buffer所指地址处。
解决方案四:
讲的是new 可以使用栈上的内存,而不是在堆上。
时间: 2024-09-27 21:42:34