【C++】《C++ 17 入门经典》读书笔记 10----指针运算符:new 和 delete

假定一个 double 类型的变量需要内存空间,可以定义一个指向 double* 类型的指针。再在执行程序时,请求为该变量分配内存空间。

一种方法是:

double* pvalue {};
pvalue = new double;

注意,所有的指针都应初始化。如果指针没有包含合法的地址,就应该总是让它包含 nullptr。

在上述代码中,第二行代码中的 new 运算符会返回在自由存储区给 double 变量分配的内存地址,这个地址应存储在 pvalue 指针中。接着就可以通过前面介绍的间接运算符,使用这个指针引用该变量了。

例如:

*pvalue = 3.14; 

当不再需要动态分配内存的变量时,就可以使用 delete 运算符,释放它占用的内存:

delete pvalue;

delete 运算符释放了内存,但没有改变指针。

解除对悬挂指针的引用会造成严重的问题,所以应总是在释放指针指向的内存时,重新设置该指针。

如下所示:

delete pvalue;
pvalue = nullptr;

现在 pvalue 不再指向任何内容。该指针不能用于访问已释放的内存。使用包含 nullptr 的指针来存储或提取数据,这会立即终止程序。

对包含 nullptr 值的指针变量应用 delete 是安全的。这种语句不会有任何效果。因此,没有必要使用下面的 if 测试:

if (pvalue)
{
    delete pvalue;
    pvalue = nullptr;
}

警告:每个 new 必须对应一个 delete,每个 new[] 必须对应一个 delete[]。如果不能这样对应,就会导致不确定的行为或内存泄漏。


提示:

在日常编码中,不要直接使用 new、new[]、delete、delete[]运算符。

在现代 C++ 代码中,没有它们的立足之地。总是应该使用 std::vector<>容器(来替换或智能指针)来动态分配对象并管理其生存期。这些高级替代方法比低级的内存管理方法安全得多,可立即清除程序中的所有悬挂指针、多次释放、分配/释放不匹配和内存泄漏问题,为程序员提供巨大的帮助。

 


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值