[過去ログ]
C++相談室 part164 (1002レス)
C++相談室 part164 http://mevius.5ch.net/test/read.cgi/tech/1683600652/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
502: デフォルトの名無しさん (ワッチョイ ae7a-CYkg) [sage] 2023/07/17(月) 23:18:54.88 ID:vGotTgNV0 リアルタイムOSのタスクのように無限ループが前提のとき TASK Task1() { while(1) { Obj1 obj = Device::GetObj(); : : } のようにobjを使う場合に、GetObjが内部でnewされていると、この作りではいつかメモリ不足になってしまいます。 そうなると自作でないクラスのメソッドは使う前にnewの有無をすべて調べなければならなくなるように思います。 実際はそんな不条理はないはずで、このような問題はどう対処するのがいいですか。 http://mevius.5ch.net/test/read.cgi/tech/1683600652/502
503: デフォルトの名無しさん (ワッチョイ df01-L4gQ) [sage] 2023/07/17(月) 23:25:49.78 ID:CT+u9aWW0 >>502 自作でないクラスのメソッドは使う前には メソッドが消費するメモリを見積もらなければなりません 不条理でも何でも無い http://mevius.5ch.net/test/read.cgi/tech/1683600652/503
506: デフォルトの名無しさん (ワッチョイ 0928-rP6O) [sage] 2023/07/17(月) 23:46:35.71 ID:mG7BHGLy0 >>502 >GetObjが内部でnewされていると、この作りではいつかメモリ不足になってしまいます。 この懸念は普通の作りなら基本的に無用。基本的に問題無い (1) Obj1という型がポインタやハンドルではなくクラスの場合: objはwhile(1) { }のブロックの中で構築されるので ループの終わりでデストラクタが呼ばれる(破棄される)から、 Device::GetObj()が真っ当な作りならnewしたポインタをObj1のインスタンスobjに引き渡し、 Obj1クラスが真っ当な作りならobjが破棄されるときに引き渡されたポインタをdeleteする(ように作る からダングリングポインタは生じない(ようにできる (2) Obj1という型がポインタやハンドルの場合 確保したポインタやハンドルはいずれクローズせねばならない。 ループが次の繰り返しに入る前に確実にクローズすればよい http://mevius.5ch.net/test/read.cgi/tech/1683600652/506
509: デフォルトの名無しさん (ワッチョイ 847c-8c0A) [sage] 2023/07/18(火) 00:04:09.43 ID:yoLqrsJ/0 >>502 必要ならそのGetObj()とやらのドキュメントにDevice::ReleaseXyz()とかDevice::ReleaseObj(obj1)とかobj1.release()とかを後で呼ぶように指示されてるはず それを怠ってリークさせたならお前がタコ そういう指示がないくせに勝手にリークするならそのライブラリがタコ そんだけの話 http://mevius.5ch.net/test/read.cgi/tech/1683600652/509
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.042s