Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加速C++:我可以用原始指针代替智能指针吗?_C++_Pointers_Reference_Smart Pointers - Fatal编程技术网

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

加速C++:我可以用原始指针代替智能指针吗?,c++,pointers,reference,smart-pointers,C++,Pointers,Reference,Smart Pointers,我喜欢这本书,遗憾的是它没有涵盖智能指针,因为它们在当时不是标准的一部分。因此,在阅读这本书时,我是否可以用智能指针替换上面提到的每一个指针,分别引用?嗯,智能指针有不同的种类。例如: 您可以创建一个作用域_ptr类,这在为代码块内的任务分配时非常有用,并且您希望在资源运行到作用域时自动释放资源 比如: template <typename T> class scoped_ptr { public: scoped_ptr(T* p = 0) : mPtr(p) {}

我喜欢这本书,遗憾的是它没有涵盖智能指针,因为它们在当时不是标准的一部分。因此,在阅读这本书时,我是否可以用智能指针替换上面提到的每一个指针,分别引用?

嗯,智能指针有不同的种类。例如:

您可以创建一个作用域_ptr类,这在为代码块内的任务分配时非常有用,并且您希望在资源运行到作用域时自动释放资源

比如:

template <typename T>
class scoped_ptr
{
 public:
    scoped_ptr(T* p = 0) : mPtr(p) {}
    ~scoped_ptr() { delete mPtr; }
 //...
};
此外,您还可以创建一个行为相同但保留ref计数的共享_ptr。一旦ref计数达到0,则取消分配

共享的ptr对于存储在STL容器等中的指针很有用

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

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

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

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


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

智能指针有点用词不当。聪明的一点是,他们会为你做一些事情,不管你是否需要,想要,甚至理解这些事情是什么。这真的很重要。因为有时候你会想去商店,而智能指针会。智能指针解决了一些非常具体的问题。许多人会争辩说,如果你认为你需要智能指针,那么。我个人尽量不偏袒任何一方。相反,我使用工具箱的比喻——你需要真正理解你正在解决的问题,以及你可以使用的工具。只有这样,您才能远程期望为作业选择正确的工具。祝你好运,继续提问

你有没有书中的一个程序的具体例子,可以从使用智能指针中获益?指针直到书的一半才被引入,大多数使用指针的程序都是为了解释如何自己管理它们,也就是说,通过有效引入三个规则的Vec类的实现,以及通过对句柄类的讨论,动态分配资源的句柄类基本上是一个智能指针。我很好奇你认为聪明的指针在哪里会有好处?我最近没有读过这本书。@james mcnellis我同意,我到目前为止还没有读过这本书,这是一个预防性的问题;我在读这本书的时候不会担心智能指针。一旦你读过这本书,就可以很容易地理解所有的Boost智能指针以及它们的工作原理以及它们应该在何时使用:加速C++提供了一个非常彻底的解释句柄类,这些类应该有助于你理解正确的寿命管理。想出一个没有bug的是出人意料的困难。在过去的二十年里,我所从事的每个项目都有自己的智能指针,迟早会发现讨厌的bug。这只是为了演示。当然,它没有,因此/…您需要正确地@address评论回复,否则我们将无法在我们的回复选项卡上看到它们。我只是偶然发现了这个。是的,但在设计和实现智能指针时,它缺少一个非常重要的位置。@sbi:那不是实现。这只是为了说明作用域机制。