gpt4 book ai didi

c++ - 创建一个 const shared_ptr 成员

转载 作者:太空狗 更新时间:2023-10-29 23:46:57 24 4
gpt4 key购买 nike

我有许多派生自纯虚拟基的类:

class base {
public:
virtual int f() = 0;
};

class derived_0 : public base {
public:
int f() {return 0;}
};

class derived_1 : public base {
public:
int f() {return 1;}
};

为了简洁起见,我只放了两个派生类,但实际上我有更多。

我想创建一个类,它有一个指向基类的 const 共享指针。我想执行以下操作,但我不能,因为我必须在初始化列表中初始化常量指针:

class C{
public:
C(bool type) {
if(type) {
derived_0* xx = new derived_0;
x = shared_ptr<base>( xx );
}
else {
derived_1* xx = new derived1;
x = shared_ptr<base>( xx );
}
}
private:
const share_ptr<base> x;
};

如何获得此功能?

最佳答案

您将对象的创建封装在一个函数中,如下所示:

shared_ptr<base> create_base(bool type) {
if(type) {
return make_shared<derived_0>();
}
else {
return make_shared<derived_1>();
}
}

然后你可以在你的初始化列表中使用它:

class C{
public:
C(bool type)
: x(create_base(type))
{}
private:
const share_ptr<base> x;
};

关于c++ - 创建一个 const shared_ptr<pure virtual class> 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7997247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com