c++中指针的编程习惯

以前一直觉得连内存都管不好,会泄漏的人不适合当程序员

可是最近写代码确实的感受到这不是个简单的问题

就举个简单的例子

class A{
public:
A(B *b){}
~A(){
//这里要不要delete b?
}
private:
B *b;
}

int main(){
B *b = new B();
A *a = new A(b);
delete a;
delete b;//若A中delete b,这里就会重复delete
}
这个情形还比较简单,但是当这种嵌套越来越复杂时,就很难说能保证这中间不出错

另外还有重复delete的问题,重复delete可能导致错误delete分配给别的变量的空间

一般delete后对指针置零,可以一定程度上避免这问题

但是像这里的传值的情况,置零就无法解决这问题


其实最好是有语言支持,给函数的指针参数加一个修饰词:managed。(没看过智能指针,找时间看看)

若是函数的情况,就表示在函数调用结束时,自动delete这个指针

若是类的情况,在对象销毁时自动delete,这样,在外部就不允许delete

或者干脆给指针加个deleted域,new的时候置0,delete时置1,重复delete不操作


当然这只是妄想,使用者只能自己注意了,可能一个比较可行的方法是,变量命名规范

在变量名里加标记,表示当前域或者对象管不管它

下次有空自己定个规范。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值