코딩하는 두식이
Effective C++ 항목 4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자 본문
대입과 초기화를 헷갈리지 말자.
class PhoneNumber {};
class ABEntry{
public :
ABEntry(const string& name, const string& address, const list<PhoneNumber>& phones);
private:
string theName;
string the Address;
list<PhoneNumber> thePhones;
int theNum;
};
ABEntry::ABEntry(string& name, string& address, list<PhoneNumber>& phones)
{
theName = name; //요거는 초기화가아니라 대입임..
theAdress = adress;
thePhones = phones;
theNum = 0;
}
c++ 규칙에 의하면 객체는 생성자본문이 실행되기전에 초기화를 해야한다고 명기되어 있다.
위 코드는 이미 초기화를 진행 후, 생성자에 본문에서 대입이 이뤄졌다.
theNum은 초기화가 되었을까? --> 기본타입은 초기화 보장이 되지 않는다.
따라서 초기화를 명시적으로하는방법은 다음과 같다.
ABEntry::ABEntry(string& name, string& address, list<PhoneNumber>& phones)
: theName(name),
theAdress(adress),
thePhones(phones),
theNum(0)
{}
초기화리스트를 의무적으로 사용하는경우
1. 상수
2. 참조자
이유? 상수와 참조자는 대입연산자를 사용할수 없다.
'공부 > C++' 카테고리의 다른 글
스마트 포인터 (0) | 2022.06.28 |
---|---|
Lvalue Rvalue std::move (0) | 2022.06.28 |
Effective C++ 항목 9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2021.05.10 |
Effective C++ 항목 7 : 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. (0) | 2021.05.10 |
Effective C++ 항목 3 : 낌새만 보이면 const를 들이대 보자! (0) | 2021.05.10 |