반응형

복사 생성자 4

[C++] 복사 생성자의 호출 시점

복사 생성자가 호출되는 세 가지 시점에 대해서 정리해 보겠습니다. 1. 기존에 생성된 객체를 이용해서 새로운 객체를 초기화하는 경우 2. Call - by - value 방식의 함수호출 과정에서 객체를 인자로 전달하는 경우 3. 객체를 반환하되, 참조형으로 반환하지 않는 경우 using namespace std; class Easy { private: int num; public: Easy(int n) : num(n) {} Easy(const Easy& copy) : num(copy.num) { cout

'깊은 복사'와 '얕은 복사'

이 전 글에 디폴트 복사 생성자에 대해서 이야기했다. 멤버 대 멤버에 의한 복사로 '얕은 복사 (shallow copy)라고 한다. 이는 멤버변수가 힙의 메모리 공간을 참조하는 경우에 문제가 됩니다. 얕은 복사에 문제점에 대해서 먼저 이야기 하겠습니다. #include #include #pragma warning(disable:4996) using namespace std; class Person { char* name; int age; public: /*Person() { name = NULL; age = 0; cout name, copy.name); strcpy(this->compeny_name, copy.compeny_name); strcpy(this->phone_number, copy.phone_..

[C++] 디폴트 복사 생성자

복사 생성자에 대해 이야기하기 전에 C++ 스타일에 독특한 초기화 방식을 먼저 보겠습니다. int n = 20; int &nref = n; int s(30); int &sref(s); 위에 두 문장과 아래 두 문장은 동일한 기능을 수행합니다. 이 전 블로그에 멤버 이니셜라이저에 대해 이야기했는데 멤버 이니셜라이저 과정에서 위에 형태를 찾아볼 수 있습니다. 이어서 다음의 코드를 보겠습니다. int main() { Simple sim1(15,20); Simple sim2 = sim1; sim2.SHowSimpledata(); } Simple 클래스에 인자값을 2개를 받는 생성자를 만들었다고 가정해 보면, sim1이라는 객체는 생성과 동시에 인자값을 전달하며 생성자를 호출하였습니다. 하지만 sim2 객체는 생..

[c++]디폴트 복사 생성자

디폴트 복사 생성자란, 말 그대로 따로 지정해주지 않아도 기본으로 생성되는 생성자를 말한다. #include #include using namespace std; class People { int age; char* name; public: People(int age, const char* name) { this->age = age; this->name = new char[strlen(name) + 1]; strcpy(this->name, name); } /*People(People& pl):age(pl.age) {//이 함수가 없으면 디폴트 복사 생성자가 자동으로 생성이 된다. this->name = new char[strlen(pl.name) + 1]; strcpy(this->name,pl.name)..

c++ 2021.03.04
반응형