何时在C ++中使用智能指针或向量的向量?

时间:2017-06-17 07:34:04

标签: c++ c++11 pointers vector smart-pointers

我已经在这方面挣扎了很长一段时间,例如,如果我要集思广益,我不知道应该使用哪一个?我不应该想太多,并使用智能指针向量?请详细说明一下我可以使用哪些代码示例?

vector <Foo> example1;

vector<unique_ptr<Foo>> example2;

2 个答案:

答案 0 :(得分:-1)

根据您对原始问题的描述,我假设您正在谈论类似这样的事情......

class Foo { /*...*/ };

std::vector< std::shared_ptr<Foo> > vec_of_ptr;

std::vector< std::vector<Foo> > vec_of_vec;

vec_o​​f_ptr将是指针保持对象的列表 - &gt; 1维列表

vec_o​​f_vec将是指针保持对象列表的列表 - &gt;二维列表

你问的是什么?

在投票后被删除

注意:一旦原始问题被修改,那么原始答案就像我看起来当然很傻:)

实际上在阅读了这篇文章之后https://hackernoon.com/the-decline-of-stack-overflow-7cb69faa575d我只是想通过实验回答一个问题。

显然作者喜欢我们所有人可能都不知道到底是什么问题。我试图重复并想象出原始问题,不知何故,作者想出了另一个更接近的问题......

我认为这正是讨论和头脑风暴的力量。 正确的答案需要一个正确的问题,一开始就不容易弄清楚。

可能一个下来的选民不得不留下一些建设性的评论,只是盲目的自我。

答案 1 :(得分:-1)

可能下一个问题是

&#34;为什么我们需要指针而不是通常的对象?&#34;

&#34;为什么我们需要一个唯一的指针而不是共享指针?&#34;

之后你会知道答案 &#34;为什么我们需要一个唯一指针的向量?   而不是共享指针的向量..   而不是通常对象的矢量。&#34;

一些基本的区别

  

vector&lt; Foo&gt;例1;

将常用对象存储在矢量中。在向量操作(例如插入)期间将执行Foo的复制操作。

  

矢量&lt; unique_ptr&lt; Foo&gt; &GT;示例2;

将对象的唯一指针存储在向量中。 任何向量操作都不会执行Foo的复制操作。 您需要移动语义。 例如

   unique_ptr < Foo > obj;
   example2.insert(std::move(obj))

基本上,如果您打算在应用程序中使用唯一的,不可复制的Foo对象,则应使用unique_ptr。

否则,如果Foo obj的内存占用很少,我只会使用常规对象的向量。