[解決済み] C++ ベクトル、ポインターを使ったデストラクタ。
質問
私が知っている限りでは、私が以下の方法で作成したものはすべてデストラクタで破壊する必要があります。
new
を開き、開いたファイルストリームや他のストリームを閉じます。
しかし、C++の他のオブジェクトについては、少し疑問があります。
-
std::vector
とstd::string
s: 自動的に破棄されるのですか? -
のようなものがあった場合
std::vector<myClass*>
クラスへのポインタの ベクターデストラクタが呼ばれるとどうなるか?
のデストラクタを自動的に呼び出すのでしょうか?myClass
? それとも、ベクターだけが破壊されて、それが含むすべてのオブジェクトはまだメモリ内に存在するのでしょうか? -
あるクラスの中に別のクラスへのポインタがある場合、例えばどうなるのでしょうか。
class A { ClassB* B; }
で、クラスAはコード内のある時点で破壊されます。クラスBも破壊されるのでしょうか、それともポインタだけで、クラスBはまだメモリのどこかに存在するのでしょうか?
解決方法は?
<ブロッククオートstd::vectorとstd::strings。これらは自動的に破棄されるのですか?
はい(メンバ変数がポインタでない場合
std::vector
と
std::string
).
std::vector のようなものがある場合、vector のデストラクタが呼ばれるとどうなるのでしょうか? 自動的に myClass のデストラクタが呼ばれるのでしょうか?それとも、vector だけが破壊され、それを含むすべてのオブジェクトはまだメモリ内に存在するのでしょうか?
もし
vector<MyClass>
の場合、ベクターに含まれるすべてのオブジェクトが破壊されます。もし
vector<MyClass*>
の場合、すべてのオブジェクトは明示的に
delete
のオブジェクトを所有していると仮定します。
vector
). 第三の選択肢は
vector
のようなスマートポインタの
vector<shared_ptr<MyClass>>
この場合
vector
を明示的に指定する必要はありません。
delete
d.
クラスの中に別のクラスへのポインタがある場合はどうなりますか?
は
B
は、明示的に
delete
d. ここでも、スマートポインタを使用して、破壊を処理することができます。
B
.
関連
-
[解決済み】getline()が何らかの入力の後に使用されると動作しない 【重複あり
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] [Solved] Error C1083: Cannot open include file: 'stdafx.h'
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] Javaにデストラクタはありますか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] サブクラスへのポインタのdeleteは、ベースクラスのデストラクタを呼び出しますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】Cygwin Make bash コマンドが見つかりません。
-
[解決済み】デバッグアサーションに失敗しました。C++のベクトル添え字が範囲外
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】make_uniqueとパーフェクトフォワーディング