我有两个派生类,如下所示。这是我现在拥有的简化设计版本。
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() {};
};