멤버를 선언한다
객체가 직접 책임질 값만 멤버로 두고, 계산 가능한 값은 함수로 남긴다.
클래스를 선언했다는 것과 안전한 객체가 만들어진다는 것은 다르다. 멤버 초기화 순서, 기본값, 생성 위치가 모두 런타임 의미를 만든다.
객체가 직접 책임질 값만 멤버로 두고, 계산 가능한 값은 함수로 남긴다.
기본 생성이 가능한 타입인지, 필수 값을 강제해야 하는 타입인지 먼저 나눈다.
지역 변수, unique_ptr, vector 원소 중 어디에 놓이는지에 따라 복사와 이동이 달라진다.
class User {
public:
explicit User(std::string name) : name_(std::move(name)), size_(name_.size()) {}
private:
std::string name_;
std::size_t size_;
};