私は自動変数としてそれを使用してから、私のクラスのユーザーを防ぎたいので、私はこのようなコードを書く:私はコードがコンパイルされないことを期待するが、G ++がエラーなしでそれをコンパイル"= default"デストラクタと空のデストラクタの違いは何ですか?
class A {
private:
~A() = default;
};
int main() {
A a;
}
を。私は、コードを変更するとき
しかし、:今すぐ
class A {
private:
~A(){}
};
int main() {
A a;
}
、G ++は、私の予想であるとして~A()
は、プライベートであることエラーが発生します。
"= default"デストラクタと空のデストラクタの違いは何ですか?
gccのどのバージョンですか? –
[このデストラクタのリファレンス](http://en.cppreference.com/w/cpp/language/destructor)の違いは、ユーザが提供するデストラクタ(空であっても)が*自明ではないということです。参照:「些細なデストラクタを持つオブジェクトは、削除式を必要とせず、単純に記憶域の割り当てを解除するだけで処分できます。 –
あなたの場合、最初の例では違いはありません。[gcc4.9とclang3.5はコンパイルを拒否します](http://coliru.stacked-crooked.com/a/41976bc03bc12c79)。あなたのgccのバグでなければなりません。 – Praetorian