在另一个类的构造函数中创建n个对象的最佳方法?

尼科·森科夫

我想在创建箱子对象时创建数量可变的Treasure对象。这是我想出的解决方案。要创建n个宝藏的数组,稍后将根据需要进行解析。有改善的空间吗?

Chest::Chest (int n) {

Treasure * tArr = new Treasure[n];

}

每个宝藏都有一个唯一的ID,然后解析为一个地图,将int ID映射到Treasure。

克里斯多夫

0级改进:避免丢失已创建的对象

您的变量tArr是构造函数的本地对象,构造结束后将丢失,从而导致内存泄漏。

因此,如果您希望此代码有用,则需要制作tArr一个成员变量,并避免在构造函数中重新定义它。

Chest::Chest (int n) {
    tArr = new Treasure[n];    // assuming Treasure *tArr is a class variable
}

1级改进:3级规则

第一项改进是实施3规则否则,您会很快遇到麻烦,例如,如果您偶然复制了Chest

2级改进:不用数组,而使用向量

数组是C ++的中世纪。改用vector

class Chest {
    std::vector<Treasure> tArr;     // naming could be discussed...
    ...
}; 

Chest::Chest (int n) : tArr(n) {    // construct the vector with n elements
               // now do whatever you want with these elements
}

现在,向量的妙处在于它们可以动态增长。因此,您可以从一个空向量开始,然后使用来添加新的宝藏push_back()

Treasure x(...); // create a cool treasure not just default initialized 
tArr.push_back(x);  // add it at the end of the vector

例如,如果统一的宝藏太无聊,这可能允许您在构造函数中添加随机的宝藏。

但是您也可以将resize()它放在任意值上:

tArr.resize(tArr.size()*2);   // two times more treasures !!!  

3级改进:使用地图

以下意图并不十分清楚:

每个宝藏都有一个唯一的ID,然后解析为一个地图,将int ID映射到Treasure。

假设ID是顺序的且在本地Chest,则只需向量即可:索引将是ID。

但是,如果ID不是顺序的,或者不是胸部的本地ID,那么您可能会对map感兴趣,它是一种关联数组:

std::map<int, Treasure> myMap;  // maps an int ID to a Treasure. 

问题是您不能只创建其中包含n个元素的地图:您需要一个一个地添加元素:

myMap[id] = Treasure(...);      // changes the element with id, or creates it

扇形区要简单得多。因此,只有在确实合理的情况下,才可以使用地图。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用另一个类的变量在构造函数中创建一个arraylist?

在另一个对象的构造函数中创建新的 ES6 对象失败

如何使用一个类的构造函数作为Java中另一个类的对象的参数?

稍后在 C++ 中的另一个类方法中调用类构造函数

ByteBuddy 如何使用构造函数调用类中的另一个构造函数来创建类?

用参数初始化另一个类构造函数中的对象

具有构造函数的另一个类中的对象数组

多次修改放置在另一个类的构造函数的参数中的对象

将属性添加到通过在构造函数中调用另一个方法创建的位图对象

在构造函数中从另一个成员构造一个类成员

实现从另一个构造函数调用构造函数的最佳方法?

是否可以在另一个类中调用一个类的构造函数?

在另一个类中调用一个类的构造函数

访问在另一个类中创建的对象

访问在另一个类中创建的对象

在另一个类中调用函数的最佳方法?(迅速)

如何从没有构造函数的另一个类中调用方法

我如何在一个类中声明一个对象,该对象在其构造函数中需要另一个?

在构造函数C ++中调用另一个对象的方法

访问在另一个函数中创建的对象

从同一类中的另一个构造函数访问构造函数变量

构造一个类在另一个文件python中的对象

从类的构造函数中的另一个属性引用一个属性的值

C ++-从另一个类构造函数调用一个类构造函数

不确定如何使用另一个类的对象创建带有参数的构造函数

尝试创建一个包含另一个类中的对象的类

将模板类的对象传递给另一个类的构造函数

从另一个构造函数中调用带有共享对象的构造函数init

另一个构造函数中的对象构造函数?