gpt4 book ai didi

c++ - Corba IDL 结构内存泄漏

转载 作者:行者123 更新时间:2023-11-30 02:49:08 28 4
gpt4 key购买 nike

我在下面有示例代码。 ServantI.cpp:login方法,它构造了一个New UserContext。 context返回前,赋值给new 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 类中是否存在内存泄漏,因为有地方可以释放 _sessionContext 指针。如果我更改,它还会报告运行时未处理异常

        UserContext* _sessionContext; 

        UserContext_var _sessionContext;

在类里面

最佳答案

servantI::login 的实现是正确的。返回值。

  • 没有内存泄漏,ORB 将清除您在此处新建的指针。
  • 如果您使用(本地)UserContext_var,则需要使用 ._retn()

还有。用户上下文的映射和存储:

不能像在上面的代码中那样存储新的 UserContext* context。当您从 servantI::login 函数返回时,它会被 ORB 销毁。如果您需要存储它,请存储 UserContext 的拷贝——毕竟它是一个简单的值结构。

session 应该如下所示:

class Session {
std::string _username;
UserContext _sessionContext;
public:
Session(string name, UserContext const& context)
: _username(name)
, _sessionContext(context)
{ }
...

关于c++ - Corba IDL 结构内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21528514/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com