【发布时间】:2011-11-23 12:38:38
【问题描述】:
一般问题
现在我已经阅读了很多关于智能指针的文章,在许多情况下,共享指针看起来像是“完美的”。但是我也读到了周期性参考或类似的东西? shared_ptr哪里不能用?我很难理解这一点,有人可以举一个简单的例子来说明这一点吗?
另外我真的很想知道,weak_ptr 提供了哪些普通指针不提供的功能? - 因为他们不增加引用计数,所以他们不能保证他们指向的内存仍然有效?
我的个人项目:
在一个项目中,我有 2 个“全局”容器(两个容器都将很快在一个类中移动),它们都充满了“对象”。然而,两者都应该“指向”同一个对象。一个对象不能存在于这些容器之外,也不应该有一个容器包含它,而另一个容器不包含它。
目前我只是为此使用普通指针,并有一个createObject& destroyObject 方法来管理内存。
这是好的设计吗?我应该使用智能指针吗?
【问题讨论】:
-
先看看这个线程:smart pointers (boost) explained
-
weak_ptr保证它将指向一个有效对象或将是null。相比之下,原始指针无法判断指向的对象是否已被销毁。 -
由于存在这么多类型的智能指针,我讨厌它们。
-
@iammilind:这就是所谓的“不要为不使用的东西付费”。您可以在标准库中看到这种理念已经很普遍,其中您有许多不同的排序和搜索功能,每个功能都针对特定要求和先决条件进行了优化(例如,如果您只寻找前十名,但不是按特定顺序 ->完全分类会浪费处理能力)。您也可以在许多容器类型中看到它。那么,你一定很讨厌 C++ 的标准库。您可以使用其他语言获得帮助,仅提供
List<>和full_sort。
标签: c++ smart-pointers