構造体のデータメンバにポインタを持ち(一応int型として)、そのポインタにnewで10個領域を確保して値を設定(randなどで)し、
std::sortしてstd::uniqueした場合に削除された値のメモリ領域は開放されるのでしょうか?
開放されないとすれば、(残った要素数)~9の領域にdeleteを行うという事で問題ないのでしょうか?
よろしくお願い致します。
構造体のポインタ要素にstd::uniqueした場合に
Re: 構造体のポインタ要素にstd::uniqueした場合に
unique - C++ Reference
おそらく途中から解放することはできないと思われるので、
int *a=new int[10];のように確保した場合はどう考えてもダメです。
int **a=new int*[10];のように確保した場合も、(比較関数の実装にもよるはずですが、デフォルトの場合は)末尾の要素は有効な要素と同じオブジェクトを指しているはずなので、deleteしてはいけないでしょう。
配列の余計なメモリを開放したいのであれば、必要十分な要素数の配列を新たに確保し、そこに有効な要素をコピーするのがいいでしょう。
std::vectorでも自動では解放されないのに、普通の配列で解放されるわけがないでしょう。豆電球 さんが書きました:構造体のデータメンバにポインタを持ち(一応int型として)、そのポインタにnewで10個領域を確保して値を設定(randなどで)し、
std::sortしてstd::uniqueした場合に削除された値のメモリ領域は開放されるのでしょうか?
問題はあるでしょう。豆電球 さんが書きました:開放されないとすれば、(残った要素数)~9の領域にdeleteを行うという事で問題ないのでしょうか?
おそらく途中から解放することはできないと思われるので、
int *a=new int[10];のように確保した場合はどう考えてもダメです。
int **a=new int*[10];のように確保した場合も、(比較関数の実装にもよるはずですが、デフォルトの場合は)末尾の要素は有効な要素と同じオブジェクトを指しているはずなので、deleteしてはいけないでしょう。
配列の余計なメモリを開放したいのであれば、必要十分な要素数の配列を新たに確保し、そこに有効な要素をコピーするのがいいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 構造体のポインタ要素にstd::uniqueした場合に
みけCATさん、ありがとうございます。
今の私のレベルでは実装は避けた方が良さそうです。
ありがとうございました。
今の私のレベルでは実装は避けた方が良さそうです。
ありがとうございました。