繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM