【问题标题】:Copy constructor, objects, pointers复制构造函数、对象、指针
【发布时间】:2011-02-09 01:14:58
【问题描述】:

假设我有这个:

SolutionSet(const SolutionSet &solutionSet) {
    this->capacity_ = solutionSet.capacity_;
    this->solutionsList_ = solutionSet.solutionsList_; // <--
}

solutionsList_vector&lt;SomeType*&gt; vect*。复制该向量的正确方法是什么(我想这种方式我做得不对..)?

【问题讨论】:

  • 此外,为什么将指针存储在向量中而不是对象中?将原始指针存储在标准库容器中通常 是一个好主意;您应该更喜欢使用指针容器(如 Boost 库提供的那些)或将智能指针存储在容器中。
  • 相关问题(在那里得到答案会澄清这个问题的一些歧义):stackoverflow.com/questions/2656700/c-pointers-objects-etc
  • @James McNellis:某些类型的智能指针,例如 auto_ptr,在 STL 容器中存储是不安全的。
  • 我误读了第一版中的 vect 类型,你现在所拥有的确实没有意义。 vect的类型是什么?

标签: c++ pointers constructor object copy


【解决方案1】:

vector&lt;SomeType*&gt; vect*。复制该向量[...]的正确方法是什么?

正确的方法是不要有指向动态分配对象的哑指针。使它成为一个智能指针,这一切都变得容易得多。

【讨论】:

    【解决方案2】:

    您现在所做的是解决方案列表的“浅拷贝” - 原始向量包含对解决方案的引用列表,而复制的向量将包含对相同解决方案的引用。这可能正是您所需要的。

    如果不是,并且您确实需要深层副本,即您希望在创建第二个解决方案集时复制每个解决方案,则需要确保您的 SomeType 具有明确定义的复制构造函数,然后手动遍历新向量中的所有项目并进行复制:

    for (int i = 0; i < solutionsList.size(); i++) 
         solutionsList[i] = new SomeType(solutionsList[i]);
    

    或者使用指针容器,正如已经建议的那样(虽然这可能是一种矫枉过正)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2016-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多