-2

以前も似たような質問をしたことがありますが、今回はもっと具体的にしたいと思います。私が直面している問題は、コピー不可能なオブジェクトを含むオブジェクトがあり、誰かが私のインターフェイスを使用したいのに、それをうまく使用しない場合 (オブジェクトのコピー コンストラクターを使用しようとする場合)、コンパイル エラーが発生することです。彼の実際のコードではなく、オブジェクトに。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 &)'
4

1 に答える 1

1

提供されたエラー メッセージは、提供されたコードを反映していません。

それはさておき、エラーがあります。コードを考慮する:

class ObjectHolder 
{
    public:
        virtual ~ObjectHolder ();
        ObjectHolder(int i) : obj(i) {}

        ObjectHolder obj;
};

コンパイラーは、ObjectHolder再帰的な場合に必要なメモリーの量をどのように確認するのでしょうか?

于 2013-03-07T15:55:16.203 に答える