提问人:james 提问时间:8/4/2023 最后编辑:prapinjames 更新时间:8/6/2023 访问量:35
了解在 C++ 析构函数中移动和访问资源的后果
Understanding the Consequences of Moving and Accessing Resources in C++ Destructors
问:
我有以下代码为我的问题提供上下文。当被调用时,会先被移动,导致被移动后被破坏。但是,我正在尝试在析构函数中使用。有人可以验证以下假设吗?谢谢!move_test()
main()
a
a._str
a._str
a._str
现已移动并处于未定义状态,尝试访问它可能会导致问题。
#include <iostream>
#include <string>
struct A {
A(A&& other)
: _str(std::move(other._str)) {
std::cout<<"A move constructed"<<std::endl;
}
~A() {
// _str has been moved, but accessed here, undefined behaviour?
_str = "destructor called";
std::cout<<_str<<std::endl;
}
static A move_test() {
A a("hey");
return std::move(a);
}
std::string _str;
private:
A(const std::string s) : _str(s) {}
};
int main() {
A b = A::move_test();
b._str = "longer string";
std::cout<<b._str<<std::endl;
return 0;
}
答: 暂无答案
评论