1

newキーワードは、作成されたオブジェクトへのポインターを返します。つまり、それを引き続き参照する必要があります。パフォーマンスが低下する可能性があるのではないかと心配しています。

たとえば、私が直面している一般的な状況:

class cls {
    obj *x; ...
}

// Later, in some member function:
x = new obj(...);
for (i ...) x->bar[i] = x->foo(i + x->baz);  // much dereferencing

私は参照変数にあまり熱心ではありません。私は多く*xの 's (例えば*x, *y, *z, ...) を持っていて&x_ref = *x, &y_ref = *y, ...、すべての関数の開始時に記述する必要があるため、すぐに面倒で冗長になります。

確かに、次のことを行う方が良いですか:

class cls {
    obj x; ...    // not pointer
}
x_ptr = new obj(...);
x = *x_ptr;       // then work with x, not pointer;

では、によって作成された変数を操作する標準的な方法は何newですか?

4

3 に答える 3

4

new次のように、キーワードなしでオブジェクトをインスタンス化します。

obj x;

または、コンストラクターobjがパラメーターを取る場合:

obj x(...);

これにより、ポインターの代わりにオブジェクトが提供されます。

于 2013-05-11T16:30:48.817 に答える
2

ヒープに割り当てるか、スタックに割り当てるかを決める必要があります。あなたの要件に基づいて、それは完全にあなたの決定です。逆参照によるパフォーマンスの低下はありません。cls範囲外に留まりobj、スタック内のインスタンスを保持するヒープ内を割り当てることができます

class cls {
  obj x;//default constructor of obj will be called
}

obj にデフォルトのコンストラクターがない場合は、コンストラクターで適切なコンストラクターを呼び出す必要がありclsます

于 2013-05-11T16:39:32.247 に答える