以前も似たような質問をしたことがありますが、今回はもっと具体的にしたいと思います。私が直面している問題は、コピー不可能なオブジェクトを含むオブジェクトがあり、誰かが私のインターフェイスを使用したいのに、それをうまく使用しない場合 (オブジェクトのコピー コンストラクターを使用しようとする場合)、コンパイル エラーが発生することです。彼の実際のコードではなく、オブジェクトに。2 つの質問: 1. 元のコード行を指すように修正できますか? 2.できない場合、誰かが実際にコピーc'torを使用しようとした場合にのみ発生するstatic_assertを配置するにはどうすればよいですか(いくつか試しましたが、誰かが使用していなくても取得できます... )
理解できなかった場合に備えて、サンプル コードとコンパイル エラーを追加しています... 最後のコンパイル エラーが ObjectHolder h を指していることに注意してください。ファイル..メインを指すようにしたいのですが、ありがとうございます!
*名前を置き換えたときの間違いでした..実際には、コンパイル エラーを作成したコードです。そして、障害をコピーに転送するためだけにプライベートコピーc'torを実装したくないと仮定しましょう
class NonCopyableObject
{
public:
virtual ~NonCopyableObject () {}
NonCopyableObject(int i) { m_index = i;}
int m_index;
private:
NonCopyableObject(const NonCopyableObject& other) {}
};
class ObjectHolder
{
public:
virtual ~ObjectHolder ();
ObjectHolder(int i) : obj(i) {}
NonCopyableObject obj;
};
void main()
{
ObjectHolder first(1);
ObjectHolder second(first);
}
1>------ Build started: Project: tester, Configuration: Debug Win32 ------
1> main.cpp
1>d:\users\someone\documents\visual studio 2012\projects\tester\tester\objectholder.h(13): error C2248: 'NonCopyableObject::NonCopyableObject' : cannot access private member declared in class 'NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(15) : see declaration of 'NonCopyableObject::NonCopyableObject'
1> d:\users\someone\documents\visual studio 2012\projects\tester\tester\noncopyableobject.h(8) : see declaration of 'NonCopyableObject'
1> This diagnostic occurred in the compiler generated function 'ObjectHolder::ObjectHolder(const ObjectHolder &)'