0

我有两个派生类,如下所示。这是我现在拥有的简化设计版本。

A 类对象是可复制的,但它们很大。这就是我在derived_1 类的构造函数中使用引用的原因。

我将 shared_ptr 用于派生类 2 以使 p_a 的使用成为可选的。我注意到我也可以在派生类 2 的构造函数中使用 std::optional。通过这个,我可以向用户提示这个参数确实是可选的。

请注意,这是简化版本,并且此成员p_a在所有三个类中都集中使用。在std::shared_ptr<A&>实际示例中, a 也不是构造函数的唯一参数。如果您在这里向我展示如何正确使用 std::optional ,我将不胜感激。

可以将 std::optional 与 std::shared_ptr 混合吗?

class A
{
  int m_a;
public:
  A(int a) :m_a(a) {};
};


class Base
{
protected:
  std::shared_ptr<A> p_a;  //Do I need to change type of p_a???
public:
  Base() {};

  void print()
  {
    if (p_a)
      std::cout << "p_a is allocated\n";
  }
  void virtual check() = 0;
};


class derived_1 : public Base
{
public:
  derived_1(const A& a)
  {
    p_a = std::make_shared<A>(a);
  }
  void check() {};
};

class derived_2 : public Base
  {
  public:
    derived_2(std::shared_ptr<A&> a) //can I use std::optional instead??
      {
      if (a)
        p_a = a;
      }
    void check() {};
  };
4

0 回答 0