类的静态成员变量的删除空间释放

有类如下,classcName{public:...data......fun....public:cName*m_pName;voidGetInstance(){if(... 有类如下,class cName{
public:
...data...
...fun....
public:
cName* m_pName;
void GetInstance() { if ( m_pName == NULL ) m_pName = new cName};} ;
void ReleaseInstance() {safe_delete(m_pName)}; /*这个是我采用的删除机制*/
}
cName::m_pName = NULL:
伪代码如上,类中有vector类型的属性。程序运行于linux平台,我使用GetInstance<-->ReleaseInstane()的结构进行释放的时候,服务端崩溃,根据core文件可见崩溃点在ReleaseInstance;
请问对于类的静态成员的释放这样做有问题么?如果有.请问该如何释放
补充说明下,刚刚打得急没注意有两个错误,1.m_pName的声明为 static cName* m_pName; safe_delete 为一个宏定义,展开为 if (NULL != m_pName) delete m_pName; m_pName == NULL;感谢一二楼的回答,两位的回答与我核心问题毫无关联。不过谢谢!
展开
 我来答
心中风情4
2014-01-04 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1157万
展开全部

可改为如下试试:

if(NULL!=m_pName)
    safe_delete(m_pName);

 我百度了一下,safe_delete定义如下

#define safe_delete(p) do{ delete p; p=NULL; } while(false)


如果真如楼主所说定义为

safe_delete 为一个宏定义,展开为 if (NULL != m_pName) delete m_pName; m_pName == NULL;


是不太可能出现程序崩溃的。运行以下程序未见异常:

#include <iostream>
using namespace std;

#define safe_delete(p) {if (NULL != m_pName) delete m_pName; m_pName = NULL;}

class cName{
public:

public:
        static cName* m_pName;
        static cName* GetInstance() { if ( m_pName == NULL )  m_pName = new cName; return m_pName;} 
        void ReleaseInstance() {safe_delete(m_pName);};/*这个是我采用的删除机制*/
};

cName* cName::m_pName = NULL;

int main(){
cName::GetInstance()->ReleaseInstance();
cName::GetInstance()->ReleaseInstance();
return 0;
}
Storm代理
2023-08-29 广告
"StormProxies是全球大数据IP资源服务商,其住宅代理网络由真实的家庭住宅IP组成,可为企业或个人提供满足各种场景的代理产品。点击免费测试(注册即送1G流量)StormProxies有哪些优势?1、IP+端口提取形式,不限带宽,I... 点击进入详情页
本回答由Storm代理提供
WM_THU
2014-01-04 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:4075万
展开全部
是啊,哪里静态了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-01-04
展开全部
哪里静态了……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式