作为成员的抽象基类的shared_ptr

时间:2019-03-18 16:34:55

标签: c++ std shared-ptr

我有一个抽象基类,我们称其为Message,还有一个派生类,称为StatusMessage。

包装器类必须对任何派生的消息类都持有一个shared_ptr。该消息已在构造中分配。

StatusMessage status_message{"status"};
WrapperClass wrapper{"user", status_message};

现在我的问题是:如何使WrapperClass内的shared_ptr指向StatusMessage对象?显然make_shared不起作用,因为那样会尝试构造抽象Message类的对象。

message_ptr = std::make_shared<Message>(status_message);

在我看来,不是使用引用而不是std_pointer,因为我的Message对象是在不同的类中构造的,并且在销毁包装程序之前将被销毁。这就是为什么我选择了shared_ptr的原因。

提前谢谢!如有需要,随时询问更多信息。

结构概述:

class Message {
public:
  virtual ~OcppMessage() {}
};

class StatusMessage : public Message {
public:
  void doSomething();
};

class Wrapper {
public:
  Wrapper();
private:
  std::shared_ptr<Message> message_;
};

更新1

所以我现在正在尝试的是将派生的消息对象创建为共享指针,然后将它们分配给构造函数中的成员变量。我写了一个小型测试程序来展示这个想法,这似乎行得通。

  std::shared_ptr<Message> base_ptr_;

  auto status_message = std::make_shared<StatusMessage>("status");

  base_ptr_ = status_message;

  std::shared_ptr<StatusMessage> derived_ptr =
      std::dynamic_pointer_cast<StatusMessage>(base_ptr_);

  REQUIRE(derived_ptr->status == "status");

0 个答案:

没有答案