このコードの何が問題になっているのか教えていただけますか?面接で聞いたのですが、何が悪いのかわかりません
tClassは、tClassのメンバーを出力するメソッドprintSomethingを持つテストクラスです。
tClass * A = new tClass();
f(A);
A->printSomething();
auto_ptr<tClass> * B = new tClass();
f(B);
B-> printSomething();
またはこれはトリックの質問です。
auto_ptrは、正確に1つのパーティがポインタを所有しているという前提の下で動作する一種のスマートポインタであり、その所有パーティがスコープ外になると、ポインタは削除されます。
auto_ptrを関数に渡すと、そのポインターを関数に「与えている」ので、もう持っていません。逆参照すると、nullポインタの動作が発生します(もちろん、これは未定義です)。
ただし、コードをコンパイルするには、定義をB少し変更する必要があります。
auto_ptr<tClass> B = new tClass;
auto_ptrは型(型テンプレート)ではなく、クラスがそれらの動作をオーバーロードするため、実際にはその型へのポインターはまったく必要ないためです。
それの問題点:
auto_ptr<tClass>ます。new tClass()tClass*Bに割り当てるのに適切なタイプではないタイプです。