布局NEW操作符
来源:互联网 发布:hp128fn网络打印设置 编辑:程序博客网 时间:2024/05/02 01:39
而已NEW操作符能够在分配内存时指定内存位置。下面的程序使用了布局new操作符和常规new操作符给对象分配内存。
该程序使用new操作符创建了一个512字节的内存缓冲区,然后使用new操作符在堆中创建两个JustTesting对象,并试图使用布局new操作符在内存缓冲区中创建两个JustTesting对象。
下面是我的电脑的输出
<略>
上面的程序使用布局new操作时存在两个问题。首先,在创建第二个对象时,布局new操作符使用一个新对象来覆盖用于第一个对象的内存单元。显然,如果类动态地为其成员分配内存,这将引发问题。
其次,将delete用于pc2和pc4时,将自动调用为pc2和pc4指向的对象调用析构函数;然而,将delete[]用于buffer时,不会为使用布局new操作符创建的对象调用析构函数。
为确定两个单元不重叠,可以这样做:
其中指针pc3相对于pc1的偏移量为JustTesting对象的大小
第二个教训是,如果使用布局new操作符来为对象分配内存,必须确保其析构函数被调用,但如何确保呢?
例如,在堆中创建的对象,可以这样做:
delete pc2;
然而,对于使用布局new操作符创建的对象,不能像下面一样调用delete
delete pc1; // NO!!!
原因在于delete可与常规new操作符配合使用,但不能与布局new操作符配合使用。
那么我们要显示调用析构函数,必须指定要销毁的对象:
pc3->~JustTesting(); // destroy object pointed to by pc3
- 布局NEW操作符
- 布局new操作符
- placement new 布局new操作
- C++中的布局new操作符
- 布局new操作符的用法
- C++中的布局new操作符
- 类与动态内存分配中布局new操作符
- C++_布局(placement)new操作符
- 关于C++类与动态内存分配中布局new操作符
- 关于C++类与动态内存分配中布局new操作符
- placement new 操作符
- 操作符new
- 重载New操作符
- new操作符
- placement new 操作符
- new 操作符
- 重载new操作符
- c++ new操作符
- 重载operator new与operator delete构建内存池
- 小议SQL_Server主键和自动编号问题
- [创新杯]貌似是 桶装蜂蜜问题
- java 跟.net webservice 互通问题(2)
- [创新杯] 喝酒的问题?
- 布局NEW操作符
- MyBatis insert 返回主键
- [创新杯] 七个黑白棋子 跳棋问题 ,怀念实验室里和老师摆弄棋子的校园生活.
- [创新杯]分椰子啥的.....
- [创新杯] 好吧,这次是分蜂蜜
- 在SQL Server中的全局变量
- HTML中标签的使用
- [java-io]RandomAccessFile
- PPPoE协议规范