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 |