core/utils/include/utils/the_tensor.h 的 TheTensor<T>:
TheTensor<T>
data_
= delete
C++ 规则:声明了移动构造/移动赋值后,拷贝构造/拷贝赋值不会被自动生成,但也不会被自动禁止——若代码中(当前或将来)出现按值传参、按值捕获、auto t2 = t1; 等拷贝场景,将触发编译错误或调用隐式生成的拷贝行为,导致两个对象在析构时对同一 data_ 各执行一次 delete[](double-free),进程崩溃。
auto t2 = t1;
delete[]
这是典型的 Rule of Five 不完整问题。
当前代码若从不发生拷贝,= delete 后编译通过即证明零行为变化(编译即验证,最安全的一类修改);若存在隐藏拷贝,编译报错恰好提前暴露 double-free 地雷,属于将运行期崩溃提前到编译期。
TheTensor(const TheTensor &) = delete; TheTensor &operator=(const TheTensor &) = delete;
感谢您的反馈,当前@east_yang跟踪处理中。
Describe the current behavior / 问题描述
core/utils/include/utils/the_tensor.h 的
TheTensor<T>:data_所有权转移(源指针置空);= delete。C++ 规则:声明了移动构造/移动赋值后,拷贝构造/拷贝赋值不会被自动生成,但也不会被自动禁止——若代码中(当前或将来)出现按值传参、按值捕获、
auto t2 = t1;等拷贝场景,将触发编译错误或调用隐式生成的拷贝行为,导致两个对象在析构时对同一data_各执行一次delete[](double-free),进程崩溃。这是典型的 Rule of Five 不完整问题。
Impact / 影响
当前代码若从不发生拷贝,
= delete后编译通过即证明零行为变化(编译即验证,最安全的一类修改);若存在隐藏拷贝,编译报错恰好提前暴露 double-free 地雷,属于将运行期崩溃提前到编译期。Suggested fix / 修复建议
TheTensor(const TheTensor &) = delete; TheTensor &operator=(const TheTensor &) = delete;Environment / 环境信息