类对象数组初始化(三种方法)
来源:互联网 发布:中班亲子美工活动教案 编辑:程序博客网 时间:2024/06/12 01:09
参考自《More Effective C++中文版》 类对象数组初始化 如有一个如下类: 以下列出几种初始化的方法: 注意: PEP bestPieces[10]; //等同于 PEP *bestPieces = new PEP[10]; //然后初始化 注意: //分配足够的raw memory,给一个预备容纳10个EquipmentPiece objects的数组使用 //让bestPieces指向此内存,使这块内存被视为一个EquipmentPiece数组 //利用"placement new"构造这块内存中的EquipmentPiece objects。 注意:该方法维护比较困难。在数组内对象结束生命时,要以手动方式调用destructors,最后还得调用operator delete释放raw memory。 //释放raw memory
class EquipmentPiece {
private:
int IDNumber;
public:
EquipmentPiece(int IDNumber) : IDNumber(IDNumber) {};
};
<一>、对象数组
int ID1, ID2, ID3;
EquipmentPiece bestPieces[] = { EquipmentPiece(ID1), EquipmentPiece(ID2), EquipmentPiece(ID3) };
EquipmentPiece bestPieces[10]; //no appropriate default constructor available
EquipmentPiece *bestPieces = new EquipmentPiece[10]; //no appropriate default constructor available
当然,如果你将构造函数参数全都设了默认值,以上两种写法也成功,如将类中构造函数修改如下:
...
EquipmentPiece(int IDNumber = 0) : IDNumber(IDNumber) {};
...
<二>、指针数组
typedef EquipmentPiece* PEP; //PEP是个指向EquipmentPiece的指针
for(int i = 0; i < 10; i++){
bestPieces[i] = new EquipmentPiece( IDNumber );
}
要记得将此数组所指的所有对象删除。如果忘了会产生资源泄露。还有就是该方法与对象数组相比需要额外内存用于存放指针。(过度使用内存 这一问题可以避免,见第三种方法)
<三>、使用placement new
方法是:先为此数组分配raw memory,然后使用"placement new"在这块内存上构造EquipmentPiece objects;
void *rawMemory = operator new(10*sizeof(EquipmentPiece));
EquipmentPiece *bestPieces = reinterpret_cast<EquipmentPiece*>(rawMemory);
int IDNumber = 0;
for(int i = 0; i < 10; i++){
new (&bestPieces[i]) EquipmentPiece( IDNumber );
}
//将bestPieces中对象以构造次序的反序析构掉
for(i = 0; i < 10; i++){
bestPieces[i].~EquipmentPiece();
}
operator delete (rawMemory);
- 类对象数组初始化(三种方法)
- 类对象数组初始化(三种方法)
- 类对象数组初始化(三种方法)
- c++类对象数组初始化的几种方法
- 类对象数组初始化
- js之二维数组定义和初始化三种方法
- js 二维数组 定义和初始化 三种方法
- js二维数组定义和初始化的三种方法
- JAVA对象数组的初始化方法
- JAVA对象数组的初始化方法
- JAVA对象数组的初始化方法
- C++类对象数组初始化
- JS三种初始化方法
- C#初始化数组的三种方式
- Java 数组初始化的三种办法.
- C#初始化数组的三种方式
- Java数组的三种初始化方式
- 三、数组初始化
- Android的一段常用动画效果代码(如何让点击的图片控件加速飞入到指定位置)
- VC中的无穷
- 使用库函数gets和putchar实现字符串反转
- session疑问
- linux内核hack-运行中动态添加系统调用
- 类对象数组初始化(三种方法)
- 文件读写&访问sdcard&文件操作模式
- DWR 显示返回的 List 数据为 null
- 关于软考与职称的正确认识
- asp.net页面静态化
- 创建导出对话框的dll
- java学习数据库操作基础更规范的写法——————工具类
- 人工智能大作业啊。。。
- 全排列