我想建立一个派生类对象的数组。我有这个基类:
class CandyBox {
protected:
string flavor;
string origin;
public:
inline CandyBox();
inline CandyBox(string s1, string s2);
virtual float getVolume() = 0;
virtual void toString();
CandyBox& operator=(const CandyBox& obj);
virtual ~CandyBox() {}
};
还有两个派生类,分别名为classLindt
和ChocAmor
具有构造函数和方法的类。我正在尝试建立一个像这样的草稿列表:
CandyBox** vec = new CandyBox*[n];
for (int i = 0; i < n; i++) {
cin >> type;
if (strcmp(type, "ChocAmor") == 0) {
vec[i] = new ChocAmor(1, "s", "ro");
}
else vec[i] = new Lindt(1, 2, 3, "f", "it");
}
我的问题是:如果要创建另一个CandyBag
包含此类属性的类,CandyBox** vec = new CandyBox*[n];
并且需要此方法怎么办:
CandyBag& operator=(const CandyBag& candy) {
ChocAmor::operator=(candy);
Lindt::operator=(candy);
dim_max = candy.dim_max;
current_dim = candy.current_dim;
vec = new CandyBox*[candy.dim_max];
for (int i = 0; i <= current_dim; i++) {
vec[i] = new ; //HERE I'M STUCK
// because I can't just simply write vec[i] = candy.vec[i], right?
// I need to allocate memory for that vec[i] first
}
return *this;
}
我不确定vec[i]
如果我不知道类型(如果是ChocAmor
对象或其中的Lindt
类型candy.vec[i]
)如何为它分配内存。是否应该在应存储该数组类型的地方获取一个辅助数组?
所有指向类类型的指针都具有相同的大小和表示形式。这对于完全不透明的指针至关重要。
如果要启用克隆指向的对象,请.clone()
向接口添加虚拟,和/或编写自己的复制智能指针。尽管在其他情况下可能是正确的解决方案,但是缠着指向克隆函数的指针或维护从typeid到克隆函数的映射将非常麻烦。
否则,我有一个建议:
使用智能指针(最好使用std::unique_ptr
)和标准容器(最好使用std::vector
)来避免手动进行内存管理,并获得使用标准类型的所有相关好处。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句