new標準の/を使用deleteするだけでは不十分で、明示的にデストラクタを呼び出す必要がある状況はありpA->~A()ますか?
一部のリソース管理クラスでのみ必要だと思いますが、通常は悪い考えです。デストラクタはスコープの最後で自動的に呼び出されますが、なぜ自分で明示的に呼び出す必要があるのでしょうか?
例を使った説明は素晴らしいでしょう!
new標準の/を使用deleteするだけでは不十分で、明示的にデストラクタを呼び出す必要がある状況はありpA->~A()ますか?
一部のリソース管理クラスでのみ必要だと思いますが、通常は悪い考えです。デストラクタはスコープの最後で自動的に呼び出されますが、なぜ自分で明示的に呼び出す必要があるのでしょうか?
例を使った説明は素晴らしいでしょう!
unionC++11 では、デストラクタを必要とする with 型を使用できます。コンパイラは現在アクティブな型を追跡しないため、現在アクティブなメンバーを置き換えるとき、またはunion.
9.5 [class.union] パラグラフ 4 では、標準は次のサンプル コードを使用して、現在アクティブなメンバーmから新しくアクティブなメンバーに切り替えnます。
u.m.~M();
new (&u.n) N;
明示的なデストラクタ呼び出しが使用される別のインスタンスは、placement を使用して手動で構築されたオブジェクトですnew。
malloc/互換の API を使用しようとしていたとしfreeます (たとえば、カスタム C スタイルのアロケータを指定できる C クライアントとの対話用):
void* buf = malloc(sizeof (MyType));
if (buf) {
MyType* foo = new (buf) MyType;
// ...
foo->~MyType();
free(buf);
}
(ただし、この場合は、shared_ptrまたはunique_ptrカスタムのデリータと一緒に使用する方が適切です。)