[英]Accelerated C++: Can I substitute raw pointers for smart pointers?
我喜欢这本书,遗憾的是它没有涵盖智能指针,因为它们不属于当时的标准。 因此,在阅读本书时,我可以通过智能指针,相应地引用来公平地替换每个提到的指针吗?
“智能指针”有点用词不当。 “聪明”部分是他们会为你做一些事情,无论你是否需要,想要甚至了解这些事情是什么。 这非常重要。 因为有时候你会去商店,聪明的指针会带你去教堂 。 智能指针解决了一些非常具体的问题。 许多人会争辩说,如果你认为你需要聪明的指针,那么你可能正在解决错误的问题 。 我个人尽量不偏袒任何一方。 相反,我使用工具箱比喻 - 您需要真正了解您正在解决的问题,以及您可以使用的工具。 只有这样,您才能远程期望为工作选择合适的工具。 祝你好运,并继续质疑!
嗯,有各种各样的智能指针。 例如:
您可以创建一个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容器等中的指针很有用。
所以,是的,你可以使用智能指针来实现程序的大部分目的。 但要明智地考虑你需要什么样的智能指针以及为什么。
不要简单地“找到并替换”您遇到的所有指针。
没有。
表示对象所有权的指针应替换为智能指针。
其他指针应该由迭代器替换(在最简单的情况下,它只是原始指针的typedef
,但没有人会认为它们需要删除)。
当然,智能指针和迭代器的实现代码将继续需要原始指针。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.