怎样找出一个类中没有被初始化的成员变量?

gamemagic 2011-07-06 04:55:24
一个类的成员变量, 一般会在这个类构造的时候初始化, 前提是你把这个成员变量写在了初始化列表内,

但是由于疏忽, 某些类的某个成员变量忘记写入初始化列表了...这样的变量最初值是未知的, 有一定几率会出问题.

我想问的是, 怎样快速找出这些忘记写入初始化列表的变量?


PS: 在一个较大的项目里有很多类, 如果手动一个一个查找, 未免效率太差..
不知道 Visual Studio 有没有提供类似我想要的这个功能?
...全文
430 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
FrankHB1989 2011-07-11
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 adlay 的回复:]

把那些不初始化就会有问题的类写一个包装类, 这个包装类不提供默认构造函数, 必须有初始化才能编译过. 比如 int 可以定义一个:
C/C++ code

class int_class
{
public:
int_class(int x) {};
};



然后在公用的头文件里面加上:

#define int int_class

这样, 那些使用了 int 又没有……
[/Quote]

还是挺麻烦的。。要是内建指针类型就囧了……


harleypang 2011-07-11
  • 打赏
  • 举报
回复
学习+挣分
nightkids_008 2011-07-11
  • 打赏
  • 举报
回复
用lint吧 就怕用了后其他地方很多都过不去了
qingcairousi 2011-07-11
  • 打赏
  • 举报
回复
自己写个工具吧,其实也没多困难的。如果用脚本语言就更快了。
pathuang68 2011-07-11
  • 打赏
  • 举报
回复
估计没有别的法子。要不发动群众,进行人海战术?
另外,你可以考虑自己写一个工具来检查。
小时了了 2011-07-08
  • 打赏
  • 举报
回复
添加一个变量时就把初始化的代码写了,如果分配了内存就同时把释放内存的代码也写了,养成习惯一辈子也不会再遇到这种问题。呵呵。
楼主就人肉一下好了,印象深刻点。
qingkongxiaoyang 2011-07-08
  • 打赏
  • 举报
回复
不要依赖编辑器哦。
这点好像是对程序员的基本要求吧。
声明后,一定要及时初始化。
taodm 2011-07-06
  • 打赏
  • 举报
回复
呃,vc2005起都有编译warning的。
herman~~ 2011-07-06
  • 打赏
  • 举报
回复
这个没什么必要吧,开发人员必须自己保证的
至善者善之敌 2011-07-06
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 adlay 的回复:]
把那些不初始化就会有问题的类写一个包装类, 这个包装类不提供默认构造函数, 必须有初始化才能编译过. 比如 int 可以定义一个:
C/C++ code

class int_class
{
public:
int_class(int x) {};
};



然后在公用的头文件里面加上:

#define int int_class

这样, 那些使用了 i……
[/Quote]


这样是可以,就是麻烦了点。。。
你妹的特盗不 2011-07-06
  • 打赏
  • 举报
回复
好象有编译开关吧,没有初始化的东西会警告.
gamemagic 2011-07-06
  • 打赏
  • 举报
回复
ls这个办法挺好
www_adintr_com 2011-07-06
  • 打赏
  • 举报
回复
把那些不初始化就会有问题的类写一个包装类, 这个包装类不提供默认构造函数, 必须有初始化才能编译过. 比如 int 可以定义一个:

class int_class
{
public:
int_class(int x) {};
};


然后在公用的头文件里面加上:

#define int int_class

这样, 那些使用了 int 又没有初始化的编译都会报错了. 等把错误找完了, 再把上面这些代码删掉.
gamemagic 2011-07-06
  • 打赏
  • 举报
回复
我试试 PC-lint... 希望有用
独酌逸醉 2011-07-06
  • 打赏
  • 举报
回复
我想问的是, 怎样快速找出这些忘记写入初始化列表的变量?
直接检查内置类型(不知道指针算不算内置类型)有没有初始化,类对象的安全性取决于你的类构造函数了。
独酌逸醉 2011-07-06
  • 打赏
  • 举报
回复
“但是由于疏忽, 某些类的某个成员变量忘记写入初始化列表了...这样的变量最初值是未知的, 有一定几率会出问题.”
初值未知指的是内置类型吧,类的初始化的时候会按照变量的声明顺序在初始化列表中调用默认的构造函数进行初始化对象。


#include <iostream>

class A
{
public:
A() { std::cout << "A constructor !" << std::endl; }
};

class B
{
public:
B() { std::cout << "B constructor !" << std::endl; }
};

class C
{
public:
C() {}
private:
B b;
A a;
};

int main()
{
C c;
return 0;
}

ryfdizuo 2011-07-06
  • 打赏
  • 举报
回复
这个难啊,
gamemagic 2011-07-06
  • 打赏
  • 举报
回复
算了, 可能也只有靠人肉检查了... 这个懒偷不成了
luciferisnotsatan 2011-07-06
  • 打赏
  • 举报
回复
试试用pclint检测下
gamemagic 2011-07-06
  • 打赏
  • 举报
回复
有100多个class...一个一个检查也太浪费眼力了
加载更多回复(5)

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧