C++:多态复制构造函数可以工作吗?

0xC*_*ACE 6 c++ copy-constructor

考虑:

class A
{
public:
    A( int val ) : m_ValA( val ) {}
    A( const A& rhs ) {}
    int m_ValA;
};

class B : public A
{
public:
    B( int val4A, int val4B ) : A( val4A ), m_ValB( val4B ) {}
    B( const B& rhs ) : A( rhs ), m_ValB( rhs.m_ValB ) {}
    int m_ValB;
};

int main()
{
    A* b1 = new B( 1, 2 );
    A* b2 = new A( *b1 ); // ERROR...but what if it could work?
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果"new A(b1)"能够解析为创建新的B副本并返回A, C++会被破坏吗?

这甚至会有用吗?

edu*_*ffy 20

你需要这个功能,还是只是一个思想实验?

如果你需要这样做,常见的习惯是有一个Clone方法:

class A
{
public:
    A( int val ) : m_ValA( val ) {}
    A( const A& rhs ) {}
    virtual A *Clone () = 0;
    int m_ValA;
};

class B : public A
{
public:
    B( int val4A, int val4B ) : A( val4A ), m_ValB( val4B ) {}
    B( const B& rhs ) : A( rhs ), m_ValB( rhs.m_ValB ) {}
    A *Clone() { return new B(*this); }
    int m_ValB;
};

int main()
{
    A* b1 = new B( 1, 2 );
    A* b2 = b1->Clone();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • +1,但我还要在类中添加一个虚拟析构函数;) (5认同)