1

このコードの何が問題になっているのか教えていただけますか?面接で聞いたのですが、何が悪いのかわかりません

tClassは、tClassのメンバーを出力するメソッドprintSomethingを持つテストクラスです。

tClass * A = new tClass();
f(A);
A->printSomething();

auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();

またはこれはトリックの質問です。

4

2 に答える 2

6

auto_ptrは、正確に1つのパーティがポインタを所有しているという前提の下で動作する一種のスマートポインタであり、その所有パーティがスコープ外になると、ポインタは削除されます。

auto_ptrを関数に渡すと、そのポインターを関数に「与えている」ので、もう持っていません。逆参照すると、nullポインタの動作が発生します(もちろん、これは未定義です)。

ただし、コードをコンパイルするには、定義をB少し変更する必要があります。

auto_ptr<tClass> B = new tClass;

auto_ptrは型(型テンプレート)ではなく、クラスがそれらの動作をオーバーロードするため、実際にはその型へのポインターはまったく必要ないためです。

于 2010-10-03T20:00:12.773 に答える
3

それの問題点:

  • Aが削除されることはありません。
  • fは宣言されていません。
  • Bはおそらくタイプである必要がありauto_ptr<tClass>ます。
  • new tClass()tClass*Bに割り当てるのに適切なタイプではないタイプです。
于 2010-10-03T19:59:00.553 に答える