我有一个类:
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;
}
问题是 Subset
有 none 默认构造函数,所以我在 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/