• ベストアンサー

C++ 構造体のnew

こんにちは C++のプログラムで 構造体 KOUZOUTAIの領域をx個分確保したいと思っています。 構造体のメンバにはポインタは使われていません。 KOUZOUTAI *kouzoutai1; int count = 5; kouzoutai1 = new KOUZOUTAI[count]; delete[] kouzoutai1; CLASSを使用していませんが、問題ないでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • MrBan
  • ベストアンサー率53% (331/615)
回答No.2

可能です。class の有無とは無関係です。 (C++ では struct も class の一種でほぼ同じものです) 念のため補足するなら、言語規格上メモリ確保に失敗すると std::bac_alloc 例外が発生するので、どこかでこれを catch してあげてください。 # 古いコンパイラはともかく、きょうびのコンパイラは # kouzoutai1 の NULL チェックなどをする前に例外が起きますので、 # catch していないと実行時エラーでプログラムが落ちます。

pokepotto
質問者

お礼

ご回答どうもありがとうございます。 元々Cで書かれていたソースを C++にしたのですが mallocよりもnewを使ったほうが安全だということで (いくつかのC++の参考書などにC++ではmallocではなくnewを 使用すべきとあったので・・・) newを使ったのですが今ひとつ自信がもてなかったもので 質問させていただきました。 どうもありがとうございました。

その他の回答 (2)

  • MrBan
  • ベストアンサー率53% (331/615)
回答No.3

#2です。 class とかの場合とか、malloc はコンストラクタが呼ばれない(自分で配置newが必要)などの問題がでますが、提示の例ではそのあたりの問題はなく。 キャストのない型保証などがnewの有利な点ですね。 既に書きましたが、new の失敗はCのようなNULLチェックができないことが注意でしょうか。 try{ .....確保など }catch(std::bad_alloc& x) { // メモリ確保に失敗するとここに来る。 }

pokepotto
質問者

お礼

失敗時の処理についてもお教えいただき、大変助かりました。 本当にどうもありがとうございました(^^)

  • Trick--o--
  • ベストアンサー率20% (413/2034)
回答No.1

問題ない。 ……多分。

pokepotto
質問者

お礼

ご回答どうもありがとうございました(^^)