構造体のポインタ要素にstd::uniqueした場合に

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
豆電球

構造体のポインタ要素にstd::uniqueした場合に

#1

投稿記事 by 豆電球 » 9年前

構造体のデータメンバにポインタを持ち(一応int型として)、そのポインタにnewで10個領域を確保して値を設定(randなどで)し、
std::sortしてstd::uniqueした場合に削除された値のメモリ領域は開放されるのでしょうか?
開放されないとすれば、(残った要素数)~9の領域にdeleteを行うという事で問題ないのでしょうか?
よろしくお願い致します。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 構造体のポインタ要素にstd::uniqueした場合に

#2

投稿記事 by みけCAT » 9年前

unique - C++ Reference
豆電球 さんが書きました:構造体のデータメンバにポインタを持ち(一応int型として)、そのポインタにnewで10個領域を確保して値を設定(randなどで)し、
std::sortしてstd::uniqueした場合に削除された値のメモリ領域は開放されるのでしょうか?
std::vectorでも自動では解放されないのに、普通の配列で解放されるわけがないでしょう。
豆電球 さんが書きました:開放されないとすれば、(残った要素数)~9の領域にdeleteを行うという事で問題ないのでしょうか?
問題はあるでしょう。
おそらく途中から解放することはできないと思われるので、
int *a=new int[10];のように確保した場合はどう考えてもダメです。
int **a=new int*[10];のように確保した場合も、(比較関数の実装にもよるはずですが、デフォルトの場合は)末尾の要素は有効な要素と同じオブジェクトを指しているはずなので、deleteしてはいけないでしょう。

配列の余計なメモリを開放したいのであれば、必要十分な要素数の配列を新たに確保し、そこに有効な要素をコピーするのがいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

豆電球

Re: 構造体のポインタ要素にstd::uniqueした場合に

#3

投稿記事 by 豆電球 » 9年前

みけCATさん、ありがとうございます。
今の私のレベルでは実装は避けた方が良さそうです。
ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る