描述:
http://expert.csdn.net/Expert/TopicView1.asp?id=2935104
http://expert.csdn.net/Expert/TopicView1.asp?id=2934894
//////////////////////////sell.h
#include "a.h"
class ATL_NO_VTABLE CSell:...
{
public :
A a;
public:
STDMETHOD(ST_Login)(....);
};
//////////////////////////sell.cpp
#include "sell.h"
STDMETHODIMP CSell:ST_Login(...)
{
a.msg();
return S_OK;
}
/////////////////////////a.h
class A
{
A(){ MessageBox("构造");}
~A(){MessageBox("析构");}
void msg()(MessageBox("消息....");}
};
客户端调用组件服务的时候每次调用st_login都会有A的构造,析构
请问这是怎么回事?如何才能避免这种情况?
解决方案1:
同意楼上诸位,楼主应该好好检查一下客户端的代码。
解决方案2:不可能每调用一个方法就构造一次,只能说没创建一个接口调用一次!
解决方案3:我觉得你所说的情况不太可能。应该不会每次都构造的,除非你的COM对象是每次新创建的。
解决方案4: 如果不想调用A的构造和析构函数
首先,必须把CSell成员a删掉
然后,把类A中的msg函数改成静态成员函数
最后,在ST_Login调用msg的时候改成A::msg()
那你用了A,当然要用到A的构造和析构了。这是天经地义的事情嘛。为什么要避免呢???