5

基本クラスがあり、派生クラスをコピー可能にしたくありません。すべてを明示するために、次のように実装します。

class A {                                                                     
public:    
    A() = default;                                                                   
    virtual ~A() = default;                                                   
    A(const A&)  = delete;                                                    
    A(const A&&) = delete;                                                    
    A& operator=(const A&)  = delete;                                         
    A& operator=(const A&&) = delete;                                         

    virtual void vFun() = 0;                                                  
};                                                                            

class B : public A {                                                          
public:
    B() = default;                                                                       
    virtual ~B() = default;                                                   
    B(const B&)  = delete;                                                    
    B(const B&&) = delete;                                                    
    B& operator=(const B&)  = delete;                                         
    B& operator=(const B&&) = delete;                                         

    virtual void vFun() override {}                                           
};

これはそのようなことをする正しい方法ですか?私の知識と私が読んだことによると、答えはイエスですが、本番システムに導入する前に確認したいと思います。


編集

結論として: 1) ほとんどの場合、ムーブ オペレータは削除しないでください。それは、「可動性を必要とするものは無数にある」からです。2) 抽象基底クラスの場合、コンパイラが特別なメンバー関数を生成できるようにし、必要に応じて削除を派生クラスに移動できるようにする方が安全です。

4

1 に答える 1