【发布时间】:2014-04-15 19:49:30
【问题描述】:
我有一堂课:
class Geometry{
std::vector<Subset *> subsets;
int verticesCount;
...
};
我想添加一个复制构造函数,所以我可以制作该对象的深拷贝(使用自己的subsets,NOT只有自己的指针 到相同的subsets)。
我试过这个:
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() 得到错误。
我还有更多没有默认构造函数的成员。
如何解决这个问题?
我希望不为所有成员添加默认构造函数(Subset 等)最好的解决方案是不完全更改成员类(@ 987654328@ 等),但如果有必要,我可以添加一些内容。
出于原因,它们没有默认构造函数,例如安全性(我不想让某人在不提供文件名的情况下创建Model3D 类(因此可以创建顶点缓冲区,我可以假设所有Model3D 对象都关联了非空文件名)。
编辑:
因为评论。 Subset 是一个没有默认构造函数的成员类的例子。
在这种情况下,这是我自己的课程:
class Subset{
...
public:
Subset(bool useLineTopology, int vertexIndexStart, int vertexIndexAmmount = -1);
...
};
但我还有很多其他成员没有默认构造函数,比如 DirectX 的 ID3D11Buffer * constantBuffer。
【问题讨论】:
-
那么
Subset实际上有什么构造函数?Subset到底是什么? -
Subset 有复制构造函数吗?你能做类似的事情:subsets.push_back(new Subset(other.subsets[i])); ?
标签: c++ constructor copy-constructor deep-copy default-constructor