new 的一些点 的 学习
来源:互联网 发布:c 常量字符串数组 编辑:程序博客网 时间:2024/05/05 16:44
转载:http://apps.hi.baidu.com/share/detail/46283625
new的第三种形态——placement new是用来实现定位构造的,因此可以实现new operator三步操作中的第二步,也就是在取得了一块可以容纳指定类型对象的内存后,在这块内存上构造一个对象,这有点类似于前面代码中的“p->A::A(3);”这句话,但这并不是一个标准的写法,正确的写法是使用placement new:
[Page]
#include <new.h>
void main()
{
char s[sizeof(A)];
A* p = (A*)s;
new(p) A(3); //p->A::A(3);
p->Say();
}
对头文件<new>或<new.h>的引用是必须的,这样才可以使用placement new。这里“new(p) A(3)”这种奇怪的写法便是placement new了,它实现了在指定内存地址上用指定类型的构造函数来构造一个对象的功能,后面A(3)就是对构造函数的显式调用。这里不难发现,这块指定的地址既可以是栈,又可以是堆,placement对此不加区分。但是,除非特别必要,不要直接使用placement new ,这毕竟不是用来构造对象的正式写法,只不过是new operator的一个步骤而已。使用new operator地编译器会自动生成对placement new的调用的代码,因此也会相应的生成使用delete时调用析构函数的代码。如果是像上面那样在栈上使用了placement new,则必须手工调用析构函数,这也是显式调用析构函数的唯一情况:
p->~A();
当我们觉得默认的new operator对内存的管理不能满足我们的需要,而希望自己手工的管理内存时,placement new就有用了。STL中的allocator就使用了这种方式,借助placement new来实现更灵活有效的内存管理。
- new 的一些点 的 学习
- new的一些用法。
- 异常的学习以及一些注意点
- new一些鲜为人知的用法!
- uClinux的一些点
- 面试的一些点
- 个人学习php的一些注意点的总结
- 关于深度学习的优化理论的一些点
- malloc/free new/delete 的异同点
- new与malloc的10点区别
- new与malloc的10点区别
- new和malloc的10点区别
- new与malloc的10点区别
- new与malloc的10点区别
- C++ new 关键字的 "new" 学习
- 关于JavaScript学习过程中的一些需要注意的点~~~
- c 程序 自己学习的一些出错点
- C++学习笔记之:关于类的一些补充测试(new和new[]/private构造/explicit等)
- abstract让你的远程代码承受住数据结构的变化
- Android环境变量的配置
- 基本文本聚类方法
- 转发到新浪微博QQ腾迅微博代码
- 一位老码农的编程简史
- new 的一些点 的 学习
- 简单使用触发器(详细) SQL触发器的使用及语法
- Eclipse中Outline和Package Explorer中显示的小图标的意义
- matplotlib 打包exe error
- 晚上告别
- Android程序测试(2)——Activity测试
- Hello,world
- Cannot assign requested address的解决办法
- ListView使用