次のような通信用ライブラリを使用するクラスがあります。
class Topic {
Topic( Type T, String name );
};
class Reader {
Reader (Topic, String name);
};
class Writer {
Writer (Topic, String name);
};
私は次のような話者クラスを作りたいです:
Talker (Type T, String name);
そして、コンストラクターでメンバー Writer と Reader を生成します。
私はポインタでそれを行うことの間で引き裂かれています:
class Talker {
Topic* m_Topic;
Reader* m_Reader;
Writer* m_Writer;
Talker (Type T, String name) {
m_Topic = new Topic (T, generateTopicName(name));
m_Reader = new Reader (m_Topic, generateReaderName(name));
m_Writer = new Writer (m_Topic, generateWriterName(name));
}
};
直接対:
class Talker {
Topic m_Topic;
Reader m_Reader;
Writer m_Writer;
Talker (Type T, String name) :
m_Topic(T, name),
m_Reader(m_Topic, generateReaderName(name)),
m_Writer(m_Topic, generateWriterName(name))
{}
};
私は同僚と話していましたが、メンバーの初期化順序に依存しているため、後者は明らかに悪いです。ただし、動作する自動コピー コンストラクターもあります。
特にメンバー オブジェクトのリストが長くなる場合、このようなことを行うより良い方法は何ですか?