Effective C++ 学记之16 成对使用new和delete时要采取相同形式
来源:互联网 发布:unity3d和kinect 编辑:程序博客网 时间:2024/05/22 09:07
如果你在new表达式中使用[],必须在相应的delete表达式中也使用[]。
如果你在new表达式中不使用[],一定不要在相应的delete表达式中使用[]。std::string* strPtr1 = new std::string;
std::string* strPtr2 = new std::string[100];
...
delete strPtr1; //删除一个对象
delete [] strPtr2; //删除一个由对象组成的数组
如果对strPtr1使用delete[]形式:delete会读取若干内存并解释为“数组大小”,然后多次调用析构函数。
如果对strPtr2没使用delete[]形式:可能导致99个析构函数没被调用,对象不太可能被适当删除。
也就是说,以上的2中情况都可能会导致不确定的行为哟~
单一对象和对象数组的内存布局不同: 数组内存包含“数组大小”记录,以便delete知道需要调用多少次析构函数。
delete[]认定指针指向一个数组,多次调用析构函数。
因此切记 new和delete时要采取相同形式。
对于typedef动作,当以new创建该种typedef类型对象时,应该说清楚应该以哪一种delete形式删除。
考虑下面这个例子:
typedef std::string AddressLines[4];//每个人的地址有4行 每行是一个string
使用时:std::string* pal = new AddressLines;//返回一个string* 跟new string[4]一样
这里就必须匹配delete[]:
delete pal; //行为未有定义!!!delete [] pal; //OK
*最好尽量不讨对数组形式做typedef动作。取而代之可以使用vector<string>等templates。^-^
- Effective C++ 学记之16 成对使用new和delete时要采取相同形式
- C++之成对使用的new和delete时采取相同形式(16)---《Effective C++》
- 《Effective C++》学习笔记条款16 成对使用new和delete时要采取相同形式
- Effective C++(16) 成对使用new和delete时要采取相同的形式
- Effective C++:条款16:成对使用new和delete时要采取相同形式
- 读书笔记《Effective C++》条款16:成对使用new和delete时要采取相同形式
- Effective C++读书笔记之十六:成对使用new和delete时要采取相同形式
- Effective c++ 条款16学习笔记: 成对使用new和delete时要采取相同形式
- Effective C++ Item 16 成对使用new和delete时要采取相同形式
- Effective C++ 读书笔记 条款16:成对使用new和delete时要采取相同形式
- Effective C++条款16解读:成对使用new和delete时要采取相同形式
- Effective C++条款16:成对使用new和delete时要采取相同形式
- Effective C++ Item 16-成对使用new和delete时要采取相同形式
- Effective C++——》条款16:成对使用new和delete时要采取相同的形式
- 《Effect C++》学习------条款16:成对使用new和delete时要采取相同形式
- 成对使用new和delete时要采取相同形式
- effective c++成对使用new 和 delete时要采取相同形式
- 【C++】动态内存管理(一)成对使用new和delete时要采取相同形式
- Android静默安装
- (转载)如何成为一名优秀的程序员?
- GCD 串行队列,并发队列和主队列的整理
- 红帽企业版yum时提示系统未注册的解决办法
- 最精确的手机电量校正方法,完全恢复电量,提高使用时间
- Effective C++ 学记之16 成对使用new和delete时要采取相同形式
- Push Box
- IPHONE实景导航开发总结
- 使用 Counter Analyzer 进行 Performance Monitor Counter 数据分析
- [小代码]在Android和PHP之间的加密/解密,AES加密
- 点类为基类声明为共有继承调用基类的私有成员
- 五月第二周 题解 交大OJ
- Clairewd’s message +KMP
- 自己搭建家庭“云”