[過去ログ] C++相談室 part164 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
299(4): デフォルトの名無しさん (ワッチョイ c997-trtU) [sage] 2023/06/23(金) 06:00:18.48 ID:AFPisFIg0(1) AAS
なんかのオブジェクトをポインタじゃなく実体として持ってるとして、それを delete するやり方ってないの?
たとえば std::vector A に対して
delete &A;
みたいな
303: デフォルトの名無しさん (ワッチョイ 196e-ljvc) [sage] 2023/06/23(金) 07:18:45.05 ID:v++V1HM40(1/5) AAS
>>299
deleteはdynamic storage durationのオブジェクトにのみ許される
std::vector<int> A;はautomatic storage durationの場合はその定義を囲むブレースから逸脱すれば破棄される
static storage durationの場合はプログラムの実行終了時に破棄される
thread storage durationの場合はスレッド終了時に破棄される
311(1): デフォルトの名無しさん (ワッチョイ 0d4e-L1I+) [sage] 2023/06/23(金) 10:11:58.67 ID:Zb3L9Wmq0(1) AAS
>>299
deleteで何をしたいかによるな
deleteは
・デストラクタを呼び出して
・メモリを開放する
という2つの動作が含まれるが、「メモリを開放する」に関しては、確保されてもいないメモリはもちろん開放できないが、
デストラクタは実体としてはただの関数なので、普通に呼び出すことは可能
ただし、メモリが開放される(deleteされる)時にもデストラクタはもちろん呼び出されるので、2重に呼び出しても大丈夫なように設計されたクラスである必要はある
312: デフォルトの名無しさん (ワッチョイ 8101-1tDD) [sage] 2023/06/23(金) 11:56:54.20 ID:jOpqVfQE0(1) AAS
>>299
スコープを終わらせれば消える
320: デフォルトの名無しさん (アウアウウー Sacd-Hkv7) [sage] 2023/06/23(金) 16:11:46.79 ID:lCxAQSJFa(1/2) AAS
>>299
デストラクタに直接リソース解放させるより
リソース解放用の dispose() みたいな関数を造っておいて
デストラクタから dispose() 呼ぶのと同時に
delete しないで dispose() だけ外から呼ぶ設計もあるよ
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.044s