如何在C ++中克隆动态类型未知的对象?

气球

我想建立一个派生类对象的数组。我有这个基类:

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() {}
};

还有两个派生类,分别名为classLindtChocAmor具有构造函数和方法的我正在尝试建立一个像这样的草稿列表:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用未知类型的Autofac C#中的动态TypeRegistration

来自分类Dev

从动态对象C#中检索未知的列名

来自分类Dev

如何在Java中克隆对象

来自分类Dev

如何在C ++中动态存储和访问类型?

来自分类Dev

如何在C ++中创建多类型对象池

来自分类Dev

如何在C#中查找对象类型?

来自分类Dev

如何在C ++中创建可以分配任何类型的对象

来自分类Dev

我如何在C ++中更改对象的值类型

来自分类Dev

如何在C#中确保对象的类型与此相等?

来自分类Dev

如何在C#中将动态类型的对象转换为类型参数<T>?

来自分类Dev

当对象名称未知时,如何动态删除R中已加载的对象?

来自分类Dev

如何在Windows 7中复制/克隆动态磁盘?

来自分类Dev

如何在动态添加行中克隆方法?

来自分类Dev

如何从TypeScript中的类型化对象中动态删除键

来自分类Dev

如何获得从类实例克隆的对象的类型?

来自分类Dev

如何克隆任何对象,包括特殊类型?

来自分类Dev

在C ++或Arduino中,如何在函数中接受未知类型的参数?

来自分类Dev

基于C#中给定对象类型的动态列表创建

来自分类Dev

在C#中动态设置列表对象类型

来自分类Dev

如何在Typescript / Angular2中返回动态类型的对象?

来自分类Dev

如何在javascript中克隆猫鼬查询对象

来自分类Dev

如何在JavaScript中深度克隆JSON对象

来自分类Dev

如何在Unity中启用克隆对象的子代?

来自分类Dev

如何在C中实现动态数组?

来自分类Dev

如何在C中动态定义矩阵

来自分类Dev

如何在C ++中动态创建向量

来自分类Dev

如何在C中动态定义矩阵

来自分类Dev

在编译时如何未知对象类型?

来自分类Dev

如何比较(大于小于)未知类型的对象?

Related 相关文章

热门标签

归档