コピー代入演算子の中でdelete mFoo; としている理由を教えてください。
c++
1#include <iostream> 2 3class Foo 4{ 5 int mData; 6public: 7 Foo(int iData) : mData(iData) { } 8 int get() { return mData; } 9}; 10 11class Bar 12{ 13 Foo* mFoo; 14public: 15 Bar() : mFoo(nullptr) { } 16 Bar(Foo* iFoo) : mFoo(iFoo) 17 { 18 std::cout << "new Foo =" << mFoo << std::endl; 19 } 20 ~Bar() 21 { 22 if (mFoo != nullptr) 23 { 24 std::cout << "delete mFoo = " << mFoo << std::endl; 25 delete mFoo; 26 std::cout << "deleted." << std::endl; 27 } 28 } 29 int get() { return (mFoo)?mFoo->get():-1; } 30#if 0 31 Bar& operator=(Bar& iRhs) 32 { 33 mFoo = iRhs.mFoo; 34 iRhs.mFoo = nullptr; 35 return *this; 36 } 37#else 38 Bar& operator=(Bar const& iRhs) 39 { 40 if (this != &iRhs) 41 { 42 delete mFoo; 43 mFoo = new Foo(*iRhs.mFoo); 44 } 45 return *this; 46 } 47#endif 48}; 49 50int main() 51{ 52 Bar bar0(new Foo(123)); 53 Bar bar1; 54 55 std::cout << "bar0 : " << bar0.get() << "\n"; 56 std::cout << "bar1 : " << bar1.get() << "\n"; 57 bar1 = bar0; 58 std::cout << "bar0 : " << bar0.get() << "\n"; 59 std::cout << "bar1 : " << bar1.get() << "\n"; 60}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/18 13:28
2020/12/18 13:31
2020/12/18 13:48
2020/12/18 22:22