0

単純なクラスを持つ:

class A {
public:
  A() {}
  void set(int value) { value_ = value; }

private:
  int value_;
};

およびそのグローバル インスタンス:

A a;
  1. setまだ構築されていないオブジェクトでメソッドを呼び出しても問題ありませんaか? a.set(123)これは、たとえば、別の翻訳単位の別のグローバル オブジェクトのコンストラクターから呼び出された場合に発生する可能性があります。

  2. の非パラメトリックで空のコンストラクターがobject に対して後で呼び出されたときに、a呼び出しによって設定されたオブジェクトの値は残りますか?a.set(123)Aa

4

3 に答える 3

5

まだ構築されていないオブジェクトでメソッド セットを呼び出しても問題ありませんaか?

いいえ。まだ構築を開始していないオブジェクトに対してメンバー関数を呼び出すことはできません。

(答えはnoであるため、2 番目の質問には答える必要はありません。)


動的初期化中に複数の翻訳単位からこのグローバル インスタンスにアクセスする必要がある場合は、マイヤーズ シングルトン手法を使用できます。

A& global_a()
{
    static A a;
    return a;
}

aglobal_a()が最初に呼び出されたときに初期化されます。マルチスレッド プログラムでは、初期化の同期に注意する必要がある場合があることに注意してください。

于 2012-07-12T14:27:24.177 に答える
2

あなたが書くとき

A a;

a現在、構築されたオブジェクトです。デフォルトのコンストラクタがすでに呼び出されてAいる場合A

于 2012-07-12T14:27:31.447 に答える
0

1) で、コンストラクターを呼び出しsetても問題ないという場合は、仮想メソッドではないため問題ありません。コンストラクターで仮想メソッドを呼び出すことはできません。

2)に関しては、あなたが求めていることはあまり明確ではありません。コンストラクターは一度だけ呼び出され (そのようなことを回避する方法はありますが、実行しないでください)、それはオブジェクトが最初に作成されたときです。コンストラクターをもう一度呼び出すことはできないaため、質問はあまり意味がありません。

于 2012-07-12T14:26:28.560 に答える