- ベストアンサー
C++ 構造体のnew
こんにちは C++のプログラムで 構造体 KOUZOUTAIの領域をx個分確保したいと思っています。 構造体のメンバにはポインタは使われていません。 KOUZOUTAI *kouzoutai1; int count = 5; kouzoutai1 = new KOUZOUTAI[count]; delete[] kouzoutai1; CLASSを使用していませんが、問題ないでしょうか?
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
可能です。class の有無とは無関係です。 (C++ では struct も class の一種でほぼ同じものです) 念のため補足するなら、言語規格上メモリ確保に失敗すると std::bac_alloc 例外が発生するので、どこかでこれを catch してあげてください。 # 古いコンパイラはともかく、きょうびのコンパイラは # kouzoutai1 の NULL チェックなどをする前に例外が起きますので、 # catch していないと実行時エラーでプログラムが落ちます。
その他の回答 (2)
- MrBan
- ベストアンサー率53% (331/615)
#2です。 class とかの場合とか、malloc はコンストラクタが呼ばれない(自分で配置newが必要)などの問題がでますが、提示の例ではそのあたりの問題はなく。 キャストのない型保証などがnewの有利な点ですね。 既に書きましたが、new の失敗はCのようなNULLチェックができないことが注意でしょうか。 try{ .....確保など }catch(std::bad_alloc& x) { // メモリ確保に失敗するとここに来る。 }
お礼
失敗時の処理についてもお教えいただき、大変助かりました。 本当にどうもありがとうございました(^^)
- Trick--o--
- ベストアンサー率20% (413/2034)
問題ない。 ……多分。
お礼
ご回答どうもありがとうございました(^^)
お礼
ご回答どうもありがとうございます。 元々Cで書かれていたソースを C++にしたのですが mallocよりもnewを使ったほうが安全だということで (いくつかのC++の参考書などにC++ではmallocではなくnewを 使用すべきとあったので・・・) newを使ったのですが今ひとつ自信がもてなかったもので 質問させていただきました。 どうもありがとうございました。