对于函数返回“指针”的疑惑与分析

最近在看源码的时候,发现,好多的函数采用的是返回“指针”的方式。
如这个QChart的例子:

QChart *ThemeWidget::createPieChart() const
{
    QChart *chart = new QChart();
    chart->setTitle("Pie chart");

    QPieSeries *series = new QPieSeries(chart);
    for (const Data &data : m_dataTable[0]) {
        QPieSlice *slice = series->append(data.second, data.first.y());
        if (data == m_dataTable[0].first()) {
            // Show the first slice exploded with label
            slice->setLabelVisible();
            slice->setExploded();
            slice->setExplodeDistanceFactor(0.5);
        }
    }
    series->setPieSize(0.4);
    chart->addSeries(series);

    return chart;
}

最开始看到这样使用的时候,我其实是充满着疑惑的,因为我想的是指针开辟之后如果不进行释放的话,可能会造成内存泄漏。那么那些大佬在写这个的时候,就没有想到这点吗?
后来,对于这个疑惑,我向我的同事进行了请教,才茅塞顿开。
造成内存泄漏的原因是“自由存储区中某一块内存的地址丢失了,找不到这块地址,然后进行了误操作”。
简单来说,释放指针,实际上释放的是“指针指向的那块地址空间”,在函数中定义的指针变量,注意是“变量”,也就是说这个指针变量是存放在“栈区”的,这个指针变量在函数执行结束的时候,会被程序自动释放。此时返回的实际上不是这个指针变量,而是其指向的内存地址。
也就是说,地址没丢,临时的指针变量正常消失,根本不会造成我原先想的那种内存泄漏的情况。

总结:
对于这个问题,我的薄弱点在于,没有彻底理解指针,指针本身是一个“变量”,指针指向的值才是“自由存储区中的地址”。只要这块地址不丢失,指针变量几遍消失了,也不会造成内存泄漏的情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值