암시 적으로 정의되고 명시 적으로 선언 된 기본/복사 생성자의 차이점은 무엇입니까? 명시 적으로, 또한암시 적으로 정의 된 대 명시 적으로 선언 된 생성자
road::road(){}
road::road(const road & c_road):id(c_road.id)), type(c_road.type)),
nodes(c_road.nodes){}
내 질문처럼 내 자신의 생성자를 정의의 차이는 무엇인가 암시
struct road{
std::string id;
std::string type;
std::vector<int> nodes;
road(road && m_road);
};
을 정의
struct road{
std::string id;
std::string type;
std::vector<int> nodes;
road() = default;
road(const & road c_road) = default;
road(road && m_road);
};
를 선언 I 명시 적으로 기본 생성자를 선언해야합니까 (= default; version) 아니면 암시적인 것에 의존해야합니까? 어떤 버전이 더 빠르고 안전합니까? 어떤 버전이 잘못 되었습니까?
하나 추가 할 것이라고 생각 : 복사 (또는 이동)되지 생성자를 추가 할 ** 복사기 (및 이동) 생성자를 생성하지 못하도록 **되지 않습니다 **. – Zereges
또한 .. 컴파일러가 원치 않는 ctors 또는 할당을 생성하지 못하게하려면 "... = delete;"를 사용하십시오. 선언. 예 : "T (const T &) = delete;" 복사 또는 "T & operator = (const T &&) = delete;"를 허용하지 않습니다. 이동 할당을 금지합니다. –