我有以下代码:
#include <iostream>
#include <memory>
using namespace std;
int main() {
string* s = new string("foo");
{
unique_ptr<string> ss(s);
}
cout << *s << endl;
}
如果我正确理解了唯一指针,那么ss
一旦声明就会获得s
指向的字符串对象的所有权,然后在它退出本地范围时销毁该对象。
但是,cout
语句仍然正常运行,这意味着字符串对象根本不会被销毁。你能解释一下这里发生了什么吗?感谢。
PS :我在OS X上用g ++和clang测试了代码。
编辑:好的,我现在明白这是未定义的行为。感谢所有有用的评论。