加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

我应该如何构建彼此依赖的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.如果初始化顺序很重要(代码味道),只需重新排序类定义中的成员.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读