「ロベールのC++入門講座」という参考書を読んでいたところ、
代入演算子のオーバーロードで先にnewをするメリットについて書かれていました。
ところが、書かれている内容への理解が及ばず、質問するに至りました。
詳細は下記内容です。
// 代入演算子のオーバーロード void IntArray::operator=(const IntArray& other) { int *array = new int[other.m_size]; delete[] m_array; m_array = array; m_size = other.m_size; copy(other.m_array, other.m_array + m_size, m_array); }
参考書ではコードに対して以下のような補足が記述されていました。
> ここではnewが失敗したときのことを考え、newが成功したのを確認してからdelete[]しています。
delete[]とnewの順番を逆にするとnewが失敗した場合にm_arrayにはすでに解放されたメモリを指すアドレスが残り、
デストラクタで再度delete[]した際に実行時エラーになってしまいます。
私からしてみると先をnewをしても、newに失敗した場合は実行時エラーが起こるような気がします。
ただ、参考書の内容からは先にdelete[]した場合のみ実行時エラーが起こるというような記述です。
先にnewをした際に実行時エラーが起こらない理由。
また、newをするメリットについて教えていただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/06 13:48