簡體   English   中英

Corba IDL結構內存泄漏

[英]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的實現是正確的。 返回值。

  • 沒有內存泄漏,ORB將清理你在這里新建的指針。
  • 如果您使用(本地) 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM