ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • C++ Object 생성시 주의 사항1
    C++ 2014. 1. 14. 04:01

    1) Employee a("Lee", "7324393277", 22);                  // crate a constructor

    2) Employee a = Employee("Lee", "7324393277", 22); // create a default copy constructor

    3)     Employee* a = new Employee("Lee", "7324393277", 22); // crate a constructor


    Object 생성시에 위의 두 문장은 같아 보이지만 실제로는 다른 객체를 생성을 한다.

    1) 3)은 C++ 형태의 객체 생성이며 따라서 Default 생성자가 호출된다.

    2)는 C 형태의 객체 생성이지만 실제적으로는 복사 생성자에 의해서 객체가 생성이 된다.

       2)가 문제가 되는 경우는 생성자에서 포인터를 사용하여 메모리를 동적할당하는 경우에 기본 복사 생성자는 포인터만 복사를 하기 떄문에 발생한다.


    이 문제를 최소화하기 위해서 제시하는 방법은 

    1) C++ 객체 생성 방법을 사용한다.

    2) 생성자에서는 동적할당을 사용하지 않는다. char *  --> string

    3) pointer가 들어가는 경우 반드시 복사 생성자를 overriding하여 반드시 깊은 복사를 해주어야 하며 소멸자에서도 메모리 해제를 해주어야 한다.


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

    Friend의 사용시기  (0) 2014.01.14
    Overloading과 Overriding의 차이  (0) 2014.01.14
    가상함수, 추상클래스의 권고 사항  (0) 2014.01.14
    const 사용  (0) 2014.01.14
    C++ 창시자의 조언  (0) 2014.01.08
Designed by Tistory.