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

这可能是一个简单的问题,但我有这个模板类:
template<typename Type>
class Array {
    size_t n;
    Type* buff;
public:
    Array(size_t n_): n(n_),buff(new Type[n]) {}
};

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

解决方法

代码是“不安全”的事实,它依赖于在buff之前构造n.这种依赖关系增加了脆弱性.

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

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

那么当你做了buff(new Type [n]),n是未初始化的,你有未定义的行为.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...