将抽象基类作为成员处理时的所有权问题
Ownership issues when dealing with abstract base classes as members
当在构造函数中将类作为参数传递时,我最终在大多数情况下会传递指针。主要原因是我必须传递无法实例化的抽象类,并且由于引用不能为空,我真的别无选择......
这是一个例子:
// 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
。
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- 基于boost的程序的静态链接——zlib问题
- C++格式化输出问题
- 将抽象基类作为成员处理时的所有权问题