【发布时间】:2012-12-05 19:19:17
【问题描述】:
如何为 std::array<T, ?> 类型的模板类 AClass 声明和设置成员变量(未定义大小)?实际的std::array是在构造函数中创建的,其中数组的大小是构造函数的参数。
在伪 C++ 代码中:
template <typename T> class AClass {
protected:
std::array<T, ?>* array;
public:
AClass(int n) {
this->array = new std::array<T, n>;
}
}
正确的代码是什么样的?
【问题讨论】:
-
new是干什么用的? -
这完全不是
std::array的用途,你不能像这样将参数传递给模板。 -
@R.MartinhoFernandes 告诉我为什么这里是错误的(忽略这是不可能的,因为
std::array的大小必须是编译时常量)。 -
@cls: #1 它不能编译,因为成员不是指针; #2 它会泄漏资源,因为它放弃了编译器保证的析构函数调用。
-
AClass(int n) : array() {}可以正常工作(忽略大小必须在编译时可用的事实),或者AClass(int n) : array(n) {}用于向量成员。一般来说,您可以使用T()创建T类型的对象;不涉及new,这不是Java。