C++/C++ 복사 생성자, 복사 할당 연산자(Canonical form)

여기서는 깊은 복사에 대한 개념을 위주로 보기 보단 코드로 작성 예시를 보겠다 얕은 복사와 깊은 복사로 나뉘게 되는데 보통 우리는 얕은 복사를 사용하게 된다. 하지만 동적 할당을 한 후 얕은 복사를 하게 되면 우변에 동적 할당 된 친구를 그냥 가리키는 것 밖에 안 된다. 그래서 새롭게 동적 할당을 하여 복사를 해주는 것이 깊은 복사라고 생각하면 된다. Cat::Cat(Cat const &cat) { this->brain = nullptr; *this = cat; std::cout type = cat.getType(); if (this->brain) { delete this->brain; } this->brain = new Brain(*(cat.brain)); std::cout brain; } this->..
C++의 Canonical form(정규형)을 따르게 되면 복사 생성자와 복사 할당 연산자를 꼭 기입을 해주어야한다. Canonical form(정규형)이란? C++98의 OCCF에 대해여 정리 Orthodox Canonical Class Form (OCCF) 정식 클래스 형식 OCCF는 아래 네 가지의 형태를 명시적으로 정의하여 선언하는 것을 가리킨다. 기본 생성자 기본 소멸자 복사 생성자 할당 연산자 오버로딩 예를 통해 살펴보자 Animal.hpp #ifndef ANIMAL_HPP # define ANIMAL_HPP #include class Animal { protected: std::string type; public: Animal(void); //기본 생성자 Animal(const Animal ..
대입 연산자 오버로딩 → C++의 한가지 멋진 기능 중 하나는 클래스를 선언할 때 연산자에 특별한 의미를 부여할 수 있다는 것. 이것을 operator overloading이라고 함. 아래 나열되는 특징 네이밍 컨벤션을 따라 클래스에 멤버함수를 선언함으로서 C++ operator overload를 구현 가능. 예를 들어 ‘+’연산자를 오버로딩하기 위해서 operator+ 라는 이름의 멤버함수를 만들어주면 됨. 일반적으로 오버로딩에 많이 쓰이는 연산자는 다음과 같다. = (대입 연산자) +, - , * (이진 산술 연산자) +=, =, = (복합 대입 연산자) ==, != (비교 연산자) 대입 연산자 = 대입 연산자 구현 class MyClass { public: ... MyClass & operator=..
복사 생성자란? → 한 객체의 내용을 다른 객체로 복사하여 생성된 생성자 일반적으로 생성된 생성자와 같은데 그 내용이 다른 객체를 복사하여 생성된 거승로 이해 복사 생성자읙 특징 자신과 같은 타입의 객체를 인자로 받는다. 복사 생성자가 정의 되어 있지 않다면, 디폴트 복사 생성자가 생성됨. 디폴트 복사 생성자? →일반 생성자에서 디폴트 생성자의 특징과 똑같다면 보면 되는데 클래스 내에 복사 상생자를 정의하지 않더라도 객체 생성 시 컴파일러가 자동으로 복사 생성자를 생성한다. 복사 생성자의 가장 기본적인 코드 class Test { public: Test(const Test& obj) { // copy constructor ... } } 명심해야될 부분 앞으로 복사 생성자를 정의해야 할 상황 → 매개 변수..
재윤
'C++/C++ 복사 생성자, 복사 할당 연산자(Canonical form)' 카테고리의 글 목록