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

前端之家收集整理的这篇文章主要介绍了我应该如何构建彼此依赖的C成员?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个使用库进行通信的类,如下所示:

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

猜你在找的设计模式相关文章