gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:46:28 25 4
gpt4 key购买 nike

这可能是一个简单的问题,但我有这个模板类:

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

该代码来自类(class) 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++ - 不安全的模板数组构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39373556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com