不安全的模板数组构造函数

Loa*_*oay 10 c++

这可能是一个简单的问题,但我有这个template class:

template<typename Type>
class Array {
    size_t n;
    Type* buff;
public:
    Array(size_t n_): n(n_), buff(new Type[n]) {}
};
Run Code Online (Sandbox Code Playgroud)

该代码来自课程pdf文件,其中说它buff(new Type[n])不安全.我不明白为什么它不安全,是不是size_t一般都没有签名?我可以举例说明它可能有编译和/或运行时错误吗?

Nat*_*ica 12

代码是"不安全的",因为它依赖于n以前构造buff.这种依赖性增加了代码的脆弱性.

构造类的成员时,它们按照在类中声明的顺序构造,而不是在成员初始化列表中调用它们的方式,因此如果代码更改为

template<typename Type>
class Array {
    Type* buff;
    size_t n;
public:
    Array(size_t n_): n(n_), buff(new Type[n]) {}
};
Run Code Online (Sandbox Code Playgroud)

然后当你这样做时buff(new Type[n]),n是未初始化的,你有未定义的行为.