当前位置 : 主页 > 手机开发 > 其它 >

我应该如何构建彼此依赖的C成员?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我有一个使用库进行通信的类,如下所示: class Topic { Topic( Type T, String name );};class Reader { Reader (Topic, String name);};class Writer { Writer (Topic, String name);}; 我想做一个像这样的说话者课: Talke
我有一个使用库进行通信的类,如下所示:

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.如果初始化顺序很重要(代码味道),只需重新排序类定义中的成员.

网友评论