我希望从一个C ++ std::map中引用对象,然后将其放在另一个对象中-例如,将对象从低优先级树移到高优先级树。

如果我从一棵树中erase该对象,是否完全使它无效?如果我一次在两棵树中都放了它,然后又erase(即该对象被引用了两次),该怎么办?

该文档暗示在任何一种情况下该对象都将无效,但是尚不能100%清除恕我直言。

更新这里是一个例子-但在我看来这根本行不通-至少使用引用-我必须使用某种形式的指针...

PartialPage oldPage = hTree->oldestPage();
lTree->insertOldPage(oldPage);
hTree->erase(oldPage);


注意oldestPage()返回对PartialPage的引用

最佳答案

容器通过存储自己的副本来拥有其中的元素。您的对象始终不在“两个容器”中。

如果希望引入共享资源语义,则必须在地图中存储std::shared_ptr<PartialPage>

09-16 14:59