请教高手,定义全局变量的效率问题!!
比如说我有一个类,CMyClass,
全局变量应该是这样定义: CMyClass g_MyClass
还是:CMyClass *g_pMyClass, 然后在程序中new出来.
我主要是思考一个问题extern CMyClass g_MyClass 和 extern CMyClass *g_pMyClass 两个是否有效率之间的差别,
还是extern只是一个编译问题,不存在运行时的效率问题.
[解决办法]
效率差别到多大,就值得你必须关心?
1微秒?1纳秒?1皮秒?1飞秒?
这2种方式的其它差距远比效率更值得重视。
[解决办法]
用指针,适用范围更广,可以指向CMyClass 以及派生类对象
效率上
如果CMyClass 没有虚函数(实现多态),二者差不多
如果有虚函数,则在编译阶段并不能确定指针指向的具体对象,
也就不能确定调用接口的具体版本,
即通过多态机制去实现函数调用
而用对象,已经确定对象类型,接口的版本也会在编译阶段确定
所以定义对象会更快点
[解决办法]
CMyClass g_MyClass
CMyClass *g_pMyClass, 然后在程序中new出来.
---------------------
两者区别在于:
定义对象时候:CMyClass g_MyClass 就调用了默认构造函数;CMyClass();
而:CMyClass *g_pMyClass,只是指针的申明,不会调用任何的构造函数,只有new的时候才会调用构造函数,就实现了对象的推迟定义,用的时候在定义效率会提高
对于变量而言,申明,定义没什么区别,但是指针,函数等等区别就大了。
[解决办法]
用指针更好.
ckt1120 和dizuo 两位已经说的很清楚啦.