CppCoreGuidelines C.32 考虑类是否可以拥有其成员原始指针和引用
31 August 2022
C.32: If a class has a raw pointer (T*
) or reference (T&
), consider
whether it might be owning
理由
很多代码里的所有权信息是不明确的。
例子
class legacy_class { foo* m_owning; // Bad: change to unique_ptr<T> or owner<T*> bar* m_observer; // OK: keep }
这里,m_owning
成员变量是由legacy_class
类所有的,所以要改成
unique_ptr<T>
或owner<T*>
。而m_observer
则是引用了外部的变量,所以可以保留这么写。
注意
在新写的代码里,明确表明哪些指针是类所有,哪些指针是类外面的变量。类不能保有引用的所有权。
强化
查看原始成员指针和成员引用,是否初始化的时候分配了内存。