C++值返回生命周期

查看:109
本文介绍了C++值返回生命周期的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

如下代码两个问题:
1,重载后置++,返回了的一个局部对象,这个局部对象是否会被析构销毁?
2,这里为什么返回的是Coordinate,而不是Coordinate& ?

class Coordinate{
public:
    Coordinate(int x,int y):x(x),y(y){}
    ~Coordinate(){}
    Coordinate operator++(int)
    {
        Coordinate o=*this;
        ++x;
        ++y;
        return o;
    }
private:
    int x;
    int y;
};

解决方案

离开 opertor++ 这个 o 就被销毁了,但是应该返回的是 o 的复本。

这里返回 Coordinate 应该会产生复本,但是如果返回 Coordinate& 的话,现在的代码会出错,因为 o 已经被销毁,反正它的引用也没用了。但是如果你的 onew 出来,又存在需要找个适当的地方 delete 的问题。

因为好多年没写 C++ 了,所以不是很确定,你自己可以调试一下,把几个对象的地址输出比较一下就明白了。

这篇关于C++值返回生命周期的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆