关于MSVC下QT项目的警告级别:
(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/bianchengyuyan/)用MSVC创建一个QT 项目.似乎是自动设置成最低级别,WARNNING 1 ! 记住一定要自己设置回第三级别! 否则,无数C++中会导致万劫不复的错误会被编译器放过 。举个例子:
===================
A.h
===================
class A
{
public :
A()
{
m_buf = new char[1024*1024*1024];//en ,... 1G ...just see see
};
virtual ~A()
{
printf("Oh A destroyed");
delete []m_buf;
};
private:
char* m_buf;
};
====================
C.h
====================
class A;
class C
{
public:
C():m_a(0)
{
};
virtula ~C()
{
if (m_a)
delete m_a;
}
private:
A* m_a;
};
====================
D.h
====================
#include "C.h"
#include "a.h"
class D: public C
{
public :
D()
{
m_a = new A;
};
~D()
{
printf("oh D destroyed");
};
}
===================
main.cpp
===================
#include "D.h"
int main()
{
C* d = new D;
delete d;
}
OK, 下面,不要编译,把VC 的警告级别甚至成 /W1 。 然后,编译顺利通畅。
假象的运行结果是 经过~D()后,经过~C(), 接着m_a被销毁。
真正结果呢。~A()根本没有被执行过. 智者会痛骂, W3 明明告诉你 main.cpp根本没找到~A()定义....恩恩, 说完了...