加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 05:34:25 所属栏目:百科 来源:网络整理
导读:这可能是一个简单的问题,但我有这个模板类: templatetypename Typeclass Array { size_t n; Type* buff;public: Array(size_t n_): n(n_),buff(new Type[n]) {}}; 代码来自课程pdf文件,其中说buff(new Type [n])不安全.我不明白为什么它是不安全的,是不是si
这可能是一个简单的问题,但我有这个模板类:
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是未初始化的,你有未定义的行为.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读