c++ - 在 C++ 中为没有默认构造函数的成员复制构造函数

标签 c++ constructor copy-constructor deep-copy default-constructor

我有一个类:

class Geometry{
    std::vector<Subset *> subsets;
    int verticesCount;
    ...
};

我想添加一个复制构造函数,这样我就可以对该对象进行深度复制(使用自己的子集只有自己的指针到相同的子集)。

我试过这个:

 Geometry & Geometry::operator=(const Geometry &other){
      verticesCount = other.verticesCount;
      Subset * subset = 0;
      for(unsigned int i=0; i<other.subsets.size(); i++){
           subset = new Subset();
           subsets.push_back(subset);
      }
      ...
      return *this;
 }

问题是 Subsetnone 默认构造函数,所以我在 subset = new Subset() 处出错。

我还有更多没有默认构造函数的成员。

如何解决这个问题?

我希望不为所有成员添加默认构造函数(子集 等)最好的解决方案是更改成员类(子集 等),但如果有必要,我可以向它们添加一些东西。

由于原因,它们没有默认构造函数,例如安全性(我不想让某人在不提供文件名的情况下创建 Model3D 类(因此可以创建顶点缓冲区并且我可以假设所有 Model3D 对象都没有-关联的空文件名)。


编辑:

因为评论。 Subset 是一个没有默认构造函数的成员类的例子。

在那种情况下它是我自己的类:

class Subset{
    ...
    public:
        Subset(bool useLineTopology, int vertexIndexStart, int vertexIndexAmmount = -1);
        ...
};

但我还有许多其他成员没有默认构造函数,例如 DirectX 的 ID3D11Buffer * constantBuffer

最佳答案

如果您的 Subset()类有一个复制构造函数那么你可以这样做:

std::vector<Subset *>::const_iterator it ; // use iterators
for ( it = other.subsets.begin() ; it != other.subsets.end() ; ++it )
    subset.push_back( new Subset( *it )) ; // add a copy of original subset.

如果您的 Subset()没有复制构造函数那么你不能复制。

此外,您需要记住 ~GeometryStructure()为了删除所有Subset()来自 subset std::vector 的对象

关于c++ - 在 C++ 中为没有默认构造函数的成员复制构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22338620/

相关文章:

c++ - 防止 printf 在获取用户输入时向控制台发送垃圾邮件

php - 从 PHP 中的构造函数调用另一个构造函数

javascript - 为什么回调未定义?

java - JNI 和构造函数

c++ - 带有删除器类的shared_ptr - 为什么删除器被复制?

c++ - 保留预处理器定义

c++ - 如何到达 2d std::vector (`std::vector< std::vector<T>>` ) 的第 N 个元素?

c++ - notify_all 崩溃后直接删除 std::condition_variable_any

c++ - 在里面。静态成员,而 COPY CTOR 是私有(private)的

c++ - 这是一个有效的复制构造函数吗?