C ++将派生类对象从指针复制到另一个

时间:2018-03-16 17:04:51

标签: c++ pointers copy clone

假设我有一个数据容器的基类:

class BaseClass{
public:
    int a;

    int getA();
    void setA(int newA);
}

我有一个派生类:

class DerivedClass : BaseClass{
public:
    int b;

    int getB();
    void setB(int newB);
}

现在我创建派生类的两个实例:

DerivedClass* first = new DerivedClass();
DerivedClass* second = new DerivedClass();

好的,这是我的问题: 如何让 second 指向第一个对象的深层副本(不会产生内存泄漏)?

另外,我必须考虑处理两个指针并想要复制它们的类/函数不知道确切的继承类。所以这些指针也可以指向 BaseClass 的另一个继承,并且复制函数必须仍然工作并复制 all!成员。

1 个答案:

答案 0 :(得分:2)

此代码:

derivedClass x = *new derivedClass();
derivedClass y = *new derivedClass();

是一种令人费解的说法:

derivedClass x = derivedClass();
derivedClass y = derivedClass();

new放在那里只会造成内存泄漏,并且不会使xy有任何不同,并且不会像你想象的那样使它们成为“指针”。至于:

*b = *a;

要正常工作,您应该使用虚拟功能:

class Derived {
public:
    virtual void copy_to( Base &b ) const override
    {
        if( Derived *d = dynamic_cast<Derived*>( &b ) ) 
            *d = *this;
    }

并将其称为:

 a->copy_to( *b );

当然copy_to需要在基类和每个派生类中定义和实现。