I have the following code to provide context for my question. When move_test() is called within main(), a will be moved first, causing a._str to be moved and then destructed. However, I am attempting to use a._str within the destructor. Can someone please verify the following assumption? Thank you!
a._str has now been moved and is in an undefined state, and attempting to access it could potentially result in issues.
#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;
}
Aucun commentaire:
Enregistrer un commentaire