我应该如何构建彼此依赖的C成员?
发布时间:2020-12-14 04:52:35 所属栏目:百科 来源:网络整理
导读:我有一个使用库进行通信的类,如下所示: class Topic { Topic( Type T,String name );};class Reader { Reader (Topic,String name);};class Writer { Writer (Topic,String name);}; 我想做一个像这样的说话者课: Talker (Type T,String name); 并使用构造
我有一个使用库进行通信的类,如下所示:
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)) {} }; 我正在与同事交谈,显然后者因为依赖于成员初始化顺序而很糟糕.但是,它还有一个工作自动复制构造函数. 什么是更好的方式来做这样的事情,特别是如果成员对象列表变得更长? 解决方法
这样的决定不应该基于你的同事建议的论点,因为这是一个无效的论点.即使对象成员,您也可以控制初始化的顺序 – 请参阅我的最后一段.决定应基于:
1)功能 – 你需要多态类型吗?主题,读者和作者会被继承吗?如果是,您应该使用指针来防止对象切片. 2)Logical Is Talker是成员(对象)的真正所有者还是只是指向多个类之间共享的一些对象? 老答案 另一种方法是使用智能指针代替成员.这样您仍然具有自动内存管理的优势. 但是,如果你知道你的C,你的同事的论点是无效的,后一种选择也不错.成员按照在类中声明的顺序进行初始化.因此m_Topic将首先被初始化,m_Reader将被初始化,最后是m_Writer.如果初始化顺序很重要(代码味道),只需重新排序类定义中的成员. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |