【发布时间】:2021-07-12 00:08:42
【问题描述】:
我正在尝试使用数组启动对象。有没有办法用指针来做到这一点,或者我应该找到另一种方法来做到这一点。
编辑:我想用动态内存分配编写这段代码,我知道向量是解决这个问题的更好方法。
#include <iostream>
template <class t>
class die {
private:
int sideCount;
t* valueOfSides;
public:
die(int side, t arr[]) {
sideCount = side;
valueOfSides = (t*)malloc(side * sizeof(t));
for (int counter; counter < side; counter++) {
valueOfSides[counter] = val[counter];
}
}
~die() {
free(valueOfSides);
}
};
int main() {
die<int> sixsided(6, {1,2,3,4,5,6});
}
【问题讨论】:
-
您绝对应该找到一种不同的方法来做到这一点。在纯 C++ 代码中使用
malloc和free总是会导致重大灾难。您是在哪本教科书中学会在 C++ 中使用malloc和free的?那是 C,在纯 C++ 代码中使用malloc和free从来没有正当理由。 -
我知道 std::vector 是 c++ 声明数组的方式,但我认为这不是现在的问题
-
当然可以。因为如果构造函数的参数是
const std::vector<t> &(模板类的其余部分也相应调整),那么会立即发生两件事。 1) 构造函数的第二个参数没有任何理由,明确给出值的数量,因为现在可以从t.size()轻松获得,并且 2)die<int> sixsided({1,2,3,4,5,6});将实际编译!我仍然很好奇哪本 C++ 教科书声称正确的方法是使用malloc和free。 -
这是 C 题还是 C++ 题?
-
这与“动态内存分配”无关,而是与 C++ 语法有关。不能从花括号初始化列表中推断出指针。发生任何远程类似情况的唯一上下文是字符串文字,其中
"literal string"被推导出为const char [],然后衰减为const char *。
标签: c++ arrays class constructor