大家看看这段代码会不会存在内存泄漏!!!

风河 2006-11-20 11:45:28
class xDBConnection
{
public:
char * executeSql(char const* sql){}
xDBConnection(){}
private:

}

class xDB
{
public:
xDB()
{
dbconn= new xDBConnection();
}
xDBConnection* getConnection() const
{
return dbconn;
}
private:
static xDBConnection* dbconn; //假如这里用的不是static 那么会存在泄漏吗?
}

void insertlog_i(char const* sql)
{
xDB xdb;
xDBConnection* xdbcn = NULL;

xdbcn = xdb.getConnection();

xdbcn->executeSql(sql);


}

void main()
{
for(int i=0; i<5000; i++)
{
char *sql ="select * from sysdatabases";
insertlog_i(sql);
}
}
...全文
316 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
0黄瓜0 2006-11-21
  • 打赏
  • 举报
回复
一样要泄漏,后分配的对象的地址总是覆盖先分配的地直址

这样还差不多:

class xDBConnection
{
public:
char * executeSql(char const* sql){return 0;}
xDBConnection(){}
private:
};

class xDB
{
public:
xDB()
{
if(!dbconn)
dbconn= new xDBConnection();//只会创建一次xDBConnection
}
xDBConnection* getConnection() const
{
return dbconn;
}
static void clear()
{
if(dbconn)
delete dbconn;
dbconn=0;
}
private:
static xDBConnection* dbconn;
};
xDBConnection* xDB::dbconn=0;//初始化为0
void insertlog_i(char const* sql)
{
xDB xdb;
xDBConnection* xdbcn = NULL;
xdbcn = xdb.getConnection();
xdbcn->executeSql(sql);
}

void main()
{
for(int i=0; i<5000; i++)
{
char *sql ="select * from sysdatabases";
insertlog_i(sql);
}
xDB::clear();
}
风河 2006-11-21
  • 打赏
  • 举报
回复
这里忘记了,改一下xDB和main()方法

在xDB中添加一个方法:
public:
static void clear(){delete dbconn;}

在main()中最后添加一行
xDB::clear();

这样会不会在每个循环的时候出现泄漏,由于我PC上没有安装编译器,所以无法验证
0黄瓜0 2006-11-21
  • 打赏
  • 举报
回复
楼上正解,成员的指向是new出来的,在析构时要delete,而用static,在创建多个对象时,就算析构中delete也要内存泄漏,而且delete错误。
aniude 2006-11-21
  • 打赏
  • 举报
回复
学习
vincents 2006-11-21
  • 打赏
  • 举报
回复
mark
melody110 2006-11-20
  • 打赏
  • 举报
回复
不管是不是static都会有内存泄漏
new和delete一定要配对使用

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧