[英]Corba IDL struct memory leakage
我有以下示例代碼。 ServantI.cpp:login方法,它構造一個New UserContext。 在返回上下文之前,它被分配給新的Session的sessionContext字段,即UserContext *;
//idl:
struct UserContext{
string name;
string ipaddress;
string ssoToken;
};
UserContext login(in string name, in string cipher) raises (AuthenticationException);
void logout(in string name);
// servantI.cpp
::project::UserContext * servantI::login (
const char * name,
const char * cipher)
{
project::UserContext* context = new UserConytext(); ...
boost::shared_ptr<Session> session(new Session(name, context));
map.addSession(name, session);
return context;
}
void servantI::logout (const char * name)
{
map.remove(name);
}
//Session.h:
class Session
{
std::string _username;
UserContext* _sessionContext;
public:
Session(string name, UserContext* context){ _sessionContext = context; ..}
virtual ~Session(void){
cout<<"Call descrutction "<<endl;
}
}
我的問題是Session Class中是否存在內存泄漏,因為有釋放_sessionContext指針的地方。 如果我改變,它也是報告運行時unhandle異常
UserContext* _sessionContext;
至
UserContext_var _sessionContext;
在課堂上
servantI::login
的實現是正確的。 返回值。
UserContext_var
,則需要使用._retn()
而且。 地圖和userContext的存儲:
您不能像在上面的代碼UserContext* context
那樣存儲新的UserContext* context
。 當您從servantI::login
函數返回時,它將被ORB銷毀。 如果您需要存儲它,請存儲UserContext
的副本 - 畢竟它是一個簡單的值結構。
然后會話應該看起來:
class Session {
std::string _username;
UserContext _sessionContext;
public:
Session(string name, UserContext const& context)
: _username(name)
, _sessionContext(context)
{ }
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.