gpt4 book ai didi

c++ - 将抽象基类作为成员处理时的所有权问题

转载 作者:行者123 更新时间:2023-11-28 03:34:39 26 4
gpt4 key购买 nike

在大多数情况下,当在构造函数中将类作为参数传递时,我最终传递的是指针。这样做的主要原因是我必须传递无法实例化的抽象类,并且作为引用不能为 null 我真的没有选择......

这是一个例子:

// Abstract class A
class A {
virtual void foo() = 0;
};

class B : public A {
void foo();
};

class C {
public:
C(A* a) : _a(a) {};
private:
A* _a;
};

在某些情况下,我希望 C 处理 A 对象 _a 指向的对象(删除时删除它),在其他情况下我希望 C 删除 _a 而不删除 A 对象的情况。

拥有良好编程方法的最佳实践是什么?

最佳答案

使用shared_ptr表示共享所有权,使用unique_ptr表示唯一所有权。如果您确定 C 的生命周期受限于 A 对象(或另一个拥有 A 的对象)的生命周期,那么您可以使用引用,或带有 nil 删除器的 shared_ptr

关于c++ - 将抽象基类作为成员处理时的所有权问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11362014/

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