加速C ++:我可以用原始指针替换智能指针吗?

时间:2011-02-20 00:23:01

标签: c++ pointers reference smart-pointers

我喜欢这本书,遗憾的是它没有涵盖智能指针,因为它们不属于当时的标准。因此,在阅读本书时,我可以用智能指针代替引用每个提到的指针吗?

3 个答案:

答案 0 :(得分:4)

“智能指针”有点用词不当。 “聪明”部分是他们会为你做一些事情,无论你是否需要,想要甚至了解这些事情是什么。这非常重要。因为有时候你会去商店,智能指针会drive you to church。智能指针解决了一些非常具体的问题。许多人会争辩说,如果你认为你需要聪明的指针,那么you're probably solving the wrong problem。我个人尽量不偏袒任何一方。相反,我使用工具箱比喻 - 您需要真正了解您正在解决的问题,以及您可以使用的工具。只有这样,您才能远程期望为工作选择合适的工具。祝你好运,并继续质疑!

答案 1 :(得分:2)

嗯,有各种各样的智能指针。例如:

您可以创建一个scoped_ptr类,当您在代码块中分配任务时,这个类很有用,并且您希望在运行范围时自动释放资源。

类似的东西:

template <typename T>
class scoped_ptr
{
 public:
    scoped_ptr(T* p = 0) : mPtr(p) {}
    ~scoped_ptr() { delete mPtr; }
 //...
};

此外,您可以创建一个shared_ptr,其行为相同,但保持引用计数。一旦引用计数达到0,就可以解除分配。

shared_ptr对存储在STL容器等中的指针很有用。

所以是的,您可以将智能指针用于程序的大部分目的。 但要明智地考虑你需要什么样的智能指针以及为什么。

不要简单地“找到并替换”您遇到的所有指针。

答案 2 :(得分:2)

没有

表示对象所有权的指针应替换为智能指针。

其他指针应该被迭代器替换(在最简单的情况下,对于原始指针只是typedef,但没有人会认为它们需要删除)。

当然,智能指针和迭代器的实现代码将继续需要原始指针。