C++/Syntax 2021. 3. 15. 23:30

깊은 복사(Deep Copy)

  • 하위 항목을 모두 복사하는 것

    #include <iostream>
    #include <cassert>
    
    class MyString
    {
      char*    data_ = nullptr;
      int        len_ = 0;
    
    public:
      MyString(const char* source = "")
      {
        assert(source);
    
        len_ = std::strlen(source) + 1;
        data_ = new char[len_];
    
        for (int i = 0; i < len_; ++i)
          data_[i] = source[i];
        data_[len_ - 1] = '\0';
      }
    
      ~MyString()
      {
        delete[] data_;
      }
    
      MyString(const MyString& source)
      {
        std::cout << "Copy constructor\n";
    
        len_ = source.len_;
    
        if (source.data_ != nullptr)
        {
          data_ = new char[len_];
    
          for (int i = 0; i < len_; ++i)
            data_[i] = source.data_[i];
        }
        else
          data_ = nullptr;
      }
    
      char*& getString() { return data_; }
    };
    
    int        main()
    {
      using namespace std;
    
      MyString    hello("Hello");
    
      cout << (int*)hello.getString() << endl;
      cout << hello.getString() << endl;
    
      {
        MyString    copy = hello;
    
        cout << (int*)copy.getString() << endl;
        cout << copy.getString() << endl;
      }
    
      cout << hello.getString() << endl;
    }
    • 얕은 복사에서 발생했던 문제가 발생하지 않는다.

'C++ > Syntax' 카테고리의 다른 글

C++ 람다 함수 (Lambda Function)  (0) 2021.03.30
C++ delete  (0) 2021.03.15
C++ 얕은 복사(Shallow Copy)  (0) 2021.03.15
C++ 함수 포인터 (Function Pointer)  (0) 2021.03.12
C++ 인라인 함수 (Inline Function)  (0) 2021.03.12