【发布时间】:2014-05-18 00:56:30
【问题描述】:
我一直在研究 std::unique_ptr ,但在某些时候对它的语义感到困惑。来自documentation,
No two unique_ptr instances can manage the same object
但是,即使很难,它也很可能是一个愚蠢的例子,请考虑这样的代码。
std::unique_ptr<int> a(new int(10));
std::unique_ptr<int> b = std::unique_ptr<int>(a.get());
std::cout << *b << std::endl;
*a = 5;
std::cout << *b;
a 和 b 在这里管理同一个对象,输出为 10 5。当然,由于两个唯一的 ptrs 试图在范围。
我知道这很愚蠢并且不建议使用这种用法,但是当它不是很明显时我遇到了这个(一个类成员调用另一个等)并且断言失败是我开始的事情。
我的问题是上面这句话的确切含义:它是由标准提出的,一个体面的编译器不应该允许你这样做(我在 vs2013 顺便说一句)或者你必须这样做(永远不要导致两个 unique_ptrs 指向同一个对象)(不太可能,因为我想 unique_ptrs 的目的是让我们不那么担心。)或者当涉及到 unique_ptr 时,我不应该使用任何关于原始指针(a.get())的东西。
【问题讨论】:
标签: c++11 unique-ptr