【发布时间】:2018-01-12 02:22:55
【问题描述】:
这是我用来理解std::unique_ptr行为的代码sn-p:
std::default_delete<int> d;
std::unique_ptr<int> u1;
std::unique_ptr<int> u2 (nullptr);
std::unique_ptr<int> u3 (new int);
std::unique_ptr<int> u4 (new int, d);
std::unique_ptr<int> u5 (new int, std::default_delete<int>());
std::unique_ptr<int> u6 (std::move(u5));
std::unique_ptr<int> u7 (std::move(u6));
std::unique_ptr<int> u8 (std::auto_ptr<int>(new int));
std::cout << "u1: " << (u1?"not null":"null") << '\n';
std::cout << "u2: " << (u2?"not null":"null") << '\n';
std::cout << "u3: " << (u3?"not null":"null") << '\n';
std::cout << "u4: " << (u4?"not null":"null") << '\n';
std::cout << "u5: " << (u5?"not null":"null") << '\n';
std::cout << "u6: " << (u6?"not null":"null") << '\n';
std::cout << "u7: " << (u7?"not null":"null") << '\n';
std::cout << "u8: " << (u8?"not null":"null") << '\n';
有人能解释为什么null 被打印为u5 和u6,而不是u7?提前致谢!
【问题讨论】:
-
std::unique_ptr始终只有一个所有者。当您移动所有权时,原始指针变为空。因此,如果您在某个声明之间插入打印语句,那么当值变为空时会变得很明显。使用调试器是帮助理解代码的另一种方法就像阅读文档一样。 -
非常感谢您的解释,我一直在想为什么,现在我明白了。
标签: c++ c++11 unique-ptr