所以我对移动语义的理解就是这段代码:
#include <iostream>
#include <memory>
class hello {
public:
~hello() {
std::cout << "destroyed" << std::endl;
}
hello() {
std::cout << "constructred" << std::endl;
}
};
void takecontrol(std::unique_ptr<hello>&& ptr) {
ptr.release();
}
int main()
{
auto ptr = std::make_unique<hello>();
}
应该创建内存泄漏并且只打印“构造”。
但是在运行时(http://cpp.sh/2upqq)它会破坏对象!
对我来说,它似乎应该移到ptr
中的takecontrol
然后释放然后不被删除,所以它不应该被销毁。
我错过了什么?
答案 0 :(得分:3)
如果您将对此功能的调用添加到主
中int main()
{
auto ptr = std::make_unique<hello>();
takecontrol(std::move(ptr));
}
你得到了你期望的行为。