2016-12-22 13 views
0
#include <iostream.h> 
class a { 
public: 
    ~a() { cout << 1; } 
}; 
int main() 
{ 
    a ob; 
    ob.~a(); 
    return 0; 
} 


もし何が間違っていますか?
は、私はまだ、私は他の 破壊を使用しているこのC++コードで何が問題になっていますか?


が出力を推測する「 ob.~a();」行に期待

メンバー識別子のエラーを取得しています、ターボC++で実行されているこのコードを試してみましたか?

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+10

通常はデストラクタを呼び出さないでください。 TurboC++は古くて標準に準拠していないので、なぜそれが何をするのかを尋ねるのに本当に役に立たないのです。 –

+1

文字通りOP –

答えて

4

通常、明示的にデストラクタ関数を明示的に呼び出さないでください。インスタンスがスコープ外になると暗黙的に呼び出されます。

同じインスタンスに対してデストラクタ関数を2回呼び出すと、未定義の動作につながります。


最近のコンパイラではコンパイルエラーは発生しません。 hereをご覧ください。それは、ターボC++デザイナーからの稀な良い決定の1つであり、そのようなエラーメッセージを残しているかもしれません。


デストラクタ関数を明示的に呼び出すことはまれです。 placement newで作成されたインスタンスのプールを維持している場合

+1

Re:「Turbo C++デザイナーの稀な良い決定」 - そうですか? Turbo C++は技術者が広く尊敬しているコンパイラであり、競合他社よりも標準準拠性と使いやすさが優れています。 –

2

ob.a::~a()で通話が動作する可能性があります。

これは、デストラクタを明示的に呼び出す必要はなく、呼び出さないでください。obオブジェクトが有効範囲外になると自動的に呼び出されます。

関連する問題