簡単に次のように配置できるクラス階層があります。
struct Parent {
Parent() { }
Parent(Parent& p, std::string s) { }
private:
// I want this class to be non-copyable
Parent(const Parent&);
};
struct Child : public Parent {
Child() { }
Child(Parent& p) : Parent(p, "hi") { }
};
このような2つのインスタンスを作成しようとすると:
Child c1;
Child c2(c1);
Clangから次のエラーが発生します:
test.cpp:37:8: error: call to deleted constructor of 'Child'
Child c2(c1);
^ ~~
test.cpp:30:8: note: function has been explicitly marked deleted here
struct Child : public Parent {
^
1 error generated.
このクラスをコピーできないようにしたいのでParent&
、コピーコンストラクターの代わりにオーバーロードを呼び出す方法はありますか?なぜそれがそのように動作するのかは知っていますが、回避策を探しています。Child(Parent& p)
キャストせずに呼ばれたいです。
GCCとVisualStudioでもこのエラーが発生します。Intelのコンパイラではわかりませんが、他の3つの動作が一貫していることは、それが間違っていて、他の動作が正しいことを示しているようです。