Kai*_*zay 5 c++ arrays dynamic-arrays
在我的C++项目中,有一个类需要创建一个对象数组.在类的不同实例之间,数组的大小将不同,这就是我选择使用数组的原因.
如果我做 :
int numberOfPlayers; // This is determined at run time.
int *players;
//In constructor
players= new int[numberOfPlayers]; // This works
Run Code Online (Sandbox Code Playgroud)
但如果我这样做:
Character *players;
players = new Character[numberOfPlayers]; // Compiler complains
Run Code Online (Sandbox Code Playgroud)
编译器抱怨"没有用于初始化Character的匹配构造函数"
如何动态声明"Character"类型的数组.
注意:字符与char无关.Character是我自己创建的类的名称.
编辑:字符没有默认构造函数,因为它需要传递几个参数,因此可以使用正确的状态进行初始化.唯一的构造函数有几个参数.
编辑:我在一个向量上选择了一个动态创建的数组,因为我知道在实例的生命周期中,数组的大小将是常量,但在不同的实例之间,大小将是不同的.我认为这对性能原因(内存/速度)有意义.
"正确"的方式是使用std::vector.它是一种快速,安全,可靠的替代方案new.
std::vector<Character> vec;
vec.push_back(Character(params));
vec.push_back(Character(other_params));
Run Code Online (Sandbox Code Playgroud)
如果您知道前面的大小,则可以通过使用避免重新分配开销 std::vector::reserve
std::vector<Character> vec;
vec.reserve(50);
vec.push_back(Character(params));
vec.push_back(Character(other_params));
Run Code Online (Sandbox Code Playgroud)
std::vector实际上开销几乎不存在.
现在,你不能按照你的方式做到这一点,这是因为默认new使用默认构造函数,它不存在.
| 归档时间: |
|
| 查看次数: |
1413 次 |
| 最近记录: |