当您将类成员声明为对 shared_ptr
的(常量)引用时,是否有一种方法可以使用 g++ 进行检测?我看不出这会有用的时候,但是如果你不小心将成员声明为引用,你可能会遇到一些难以发现的错误,如果你的引用计数过早地达到零(因为成员不是按值(value)持有)。
或者这是一种您只是仔细编写代码并依赖同行评审的情况?
编辑:我正在考虑与进行特定检查的printf
格式字符串检查/警告类似的内容。例如检查 shared_ptr
的东西,而不是一般的“引用成员”警告。
最佳答案
没有 编译器会提供一种工具来查找变量是否是引用。创建一个引用变量是一个非常微不足道的操作,而且大多数情况下都是真实的。为代码中存在的所有引用获取编译警告会很烦人。
查明变量是否被错误声明为引用的好方法是进行同行评审。
但是,如果您想自己检测它,我现在可以想到一种破解方法。我们可以利用引用必须在构造函数中始终初始化这一事实。您可以为所有类创建一个带有故意怪异语法的通用构造函数。示例:
#define REFERENCE_CHECK(CLASS) CLASS(int***, char***)
class A { // case [1]
REFERENCE_CHECK(A) {}
};
class B { // case [2]
X &p; // genuine reference
REFERENCE_CHECK(B) : p(*new X) {} // register with the constructor
};
class C { // case [3]
shared_ptr<int> &p;
REFERENCE_CHECK(C) {} // compiler error, because 'p' is not registered
};
这是一个伪代码;请记住,如果需要,您可能还必须分别注册基类和虚拟类。
关于c++ - 使用 g++ 检测 shared_ptr 类成员引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9780957/