繁体   English   中英

使用G ++检测shared_ptr类成员引用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM