C++ 第七章 指针、数组与引用 - 7.6 指针与所有权

第七章 指针、数组与引用

7.6 指针与所有权

资源必须先分配后释放(见5.2节)。我们用new分配内存,用delete释放内存(见11.2节);用fopen()打开文件,用fclose()关闭文件(见43.2节),因此内存和文件都是资源。指针是最常用的资源句柄。这一点不太容易理解,毕竟在程序中指针随处可见,而且作为资源句柄的指针和不作为资源句柄的指针似乎没什么差别。例如:

void confused(int* p)
{
	//释放掉p?
}
int global{7};
void f()
{
	X* pn = new int{7};
	int i{7};
	int q = &i;
	
	confused(pn);
	confused(q);
	confused(&global);
}

如果在confused()中delete掉p,则当执行后面两个调用时程序将发生非常严重的错误,原因是对于不是由new分配的对象,我们无权delete它(见11.2节)。然而,如果confused()没有delete掉p,又会造成程序的资源泄露(见11.2.1节)。在此例中,很明显应该由f()负责管理它创建在自由存储上的对象的生命周期。但是通常情况下,在一个规模较大的程序中我们需要使用某种简单有效的策略追踪和维护那些需要delete的资源。

一种比较好的策略是把表示某种所有权的指针全都置于vector、string和unique_ptr等资源句柄类中。此时,我们就能假定所有不在资源句柄中的指针都不负责管理资源,因此也不必对它们执行delete操作。第13章将详细讨论资源管理的细节。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hank_W

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值