[英]Detect shared_ptr class member reference with g++
使用g ++有什么方法可以检测何时将类成员声明为对shared_ptr
的(const)引用? 我看不到有什么用,但是如果您不小心将成员声明为引用,那么如果引用计数过早达到零(因为该成员不是该成员),则可能会遇到一些难以发现的错误。按价值持有)。
还是在这种情况下,您只是认真编写代码并依靠同行评审?
编辑:我正在考虑一些printf
格式的字符串检查/警告,其中进行了特定检查。 例如,用于检查shared_ptr
,而不是常规的“引用成员”警告。
没有编译器提供查找变量是否为引用的工具。 创建参考变量是一项非常琐碎的操作,大多数时候意图都是真实的。 获取代码中所有引用的编译警告会很烦人。
找出变量是否被错误地声明为引用的好方法是进行同行评审。
但是,如果您想自己检测它,那么我现在可以想到一个hack。 我们可以利用这样的事实,即引用必须始终在构造函数中初始化 。 您可以为所有类创建具有故意怪异语法的通用构造函数。 例:
#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
};
这是一个伪代码; 请记住,如果需要,您可能还必须分别注册基类和虚拟类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.