明示的に宣言されたデフォルト/コピーコンストラクタの違いは何ですか? は明示的に、また明示的に定義された明示的コンストラクタ対暗黙的に定義されたコンストラクタ
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);
};
を宣言し、私は明示的にデフォルトコンストラクタを宣言する必要があります(=デフォルト;バージョン)、暗黙的に依存するだけでいいですか?どのようなバージョンもどんな方法でも速く、安全ですか?どのバージョンが間違っていますか?
私は次のように考えています。コピー(または移動)ではないコンストラクタを追加すると、コンパイラのコピー(および移動)がコンパイラによって生成されなくなります**。 – Zereges
また、コンパイラが不要なctorsまたは割り当てを生成しないようにするには、 "... = delete;"を使用します。宣言例: "T(const T&)= delete;"コピーを許可しないか、または "T&operator =(const T &&)= delete;"移動割り当てを禁止する。 –