コンストラクタ、デストラクタ、および代入演算子が適切に記述されていると仮定すると、次のようにコピー コンストラクタを実装できないのはなぜですか。
MyClass::MyClass(const MyClass &other)
{
this->value = new Value(*(other.value));
}
私が見るほとんどの例は、これを行います:(通常、配列を扱っているため)
MyClass::MyClass(const MyClass &other)
{
Value *temp = new Value;
*temp = *(other.value);
this->value = temp;
}
しかし、最初の例では、'new' がスローした場合、'other' は影響を受けず、Value のコピー コンストラクターがスローした場合、'new' は例外を伝播する前に割り当てられたメモリを解放しませんか?
これはミニ スマート ポインター自体のためであるため、特に std::unique_ptr やその他のスマート ポインターの使用を避けています。