我喜欢这本书,遗憾的是它没有涵盖智能指针,因为它们不属于当时的标准。因此,在阅读本书时,我可以用智能指针代替引用每个提到的指针吗?
答案 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
,但没有人会认为它们需要删除)。
当然,智能指针和迭代器的实现代码将继续需要原始指针。