[C++] 생성자(자원 할당)+초기화리스트

kimyb·2022년 12월 12일

생성자란?

C++에서 생성자는 객체를 초기화할때 사용하는 멤버 함수로,
클래스의 인스턴스가 생성될 때 호출되고, 객체의 초기 상태를 설정하는 역할을 하며 다양한 종류의 생성자가 있어, 정리를 해보았다.

1. 기본 생성자 (Default Constructor)

매개변수를 받지 않는 생성자.
클래스에 생성자가 정의되지 않았을 때 컴파일러가 자동으로 생성.

class MyClass {
public:
    MyClass() {
        // 기본 생성자
    }
};

2. 매개변수가 있는 생성자 (Parameterized Constructor)

하나 이상의 매개변수를 받아 객체를 초기화하는 생성자.

class Person {
public:
    Person(std::string phoneNum, int age) {
        // 매개변수가 있는 생성자
    }
};

3. 복사 생성자 (Copy Constructor)

같은 클래스의 다른 객체를 사용하여 객체를 초기화하는 생성자며, 객체의 복사본을 만들 때 자주 사용됐었음.

class Point {
public:
    Point(const Point& other) {
        // 복사 생성자
    }
};

4. 이동 생성자 (Move Constructor)

C++11 이후에 추가된 생성자로, 객체의 소유권을 이전하거나 리소스를 이동시키는 데 사용. 이동 생성자는 rvalue 참조를 인수로 사용합니다.

class MyString {
public:
    MyString(MyString&& other) noexcept {
        // 이동 생성자
    }
};

5. 복사 대입 연산자 (Copy Assignment Operator)

객체의 복사본을 다른 객체로 할당할 때 호출되는 연산자. 복사 생성자와 달리 이미 생성된 객체에 대해 호출됩니다.

class Matrix {
public:
    Matrix& operator=(const Matrix& other) {
        // 복사 대입 연산자
        if (this != &other) {
            // 자기 자신과의 대입을 방지
            // 데이터 복사 또는 이동
        }
        return *this;
    }
};

++ 6. 초기화 리스트(initialization list) (중요)

생성자에서 클래스 멤버 변수를 초기화하는 효율적인 방법.
초기화 리스트를 사용하면 생성자가 호출될 때 멤버 변수를 초기화할 수 있으며,
!!생성자 본문에서 초기화하는 것보다 성능 상 이점을 가질 수 있음.!!!

class MyClass {
public:
    // 매개변수가 있는 생성자에서 초기화 리스트 사용
    MyClass(int a, double b) : intValue(a), doubleValue(b) {
        // 생성자 본문 (선택사항)
    }

private:
    int intValue;
    double doubleValue;
};
  1. 초기화 리스트는 콜론(:)으로 시작하며 생성자의 매개변수 목록 다음에 위치해야 함.

  2. 초기화되는 멤버 변수는 클래스의 멤버 변수와 동일한 이름을 가져야 함.
    ( intValue(a), doubleValue(b) )

  3. 멤버 변수를 직접 초기화하는 것이므로 객체 생성과 동시에 초기화가 이루어짐.
    ( 성능이 더 좋음 )

  4. 생성자 본문 안에서 멤버 변수를 초기화하는 것보다 효율적일 수 있으며, 특히 상수 또는 참조형 멤버 변수의 경우 필수적이다.
profile
공부했던것을 정리.

0개의 댓글