为什么返回堆栈对象有效?

时间:2014-07-14 22:46:22

标签: c++ stack return-value

堆栈对象的黄金规则说,堆栈对象一离开函数范围就会被删除。 但实际上这样的代码有效:

Vec3d Vec3d::operator+(Vec3d const& vec) const{
    return Vec3d((x + vec.getX()), (y + vec.getY()), (z + vec.getZ()));
}

将在调用时创建的Object实际上是在堆栈中并返回,并且它可以在调用操作符的函数中使用。所以事实上它应该在我尝试使用我的Vec3d时抛出异常,因为它绝对超出了重载运算符的方法范围。 它为什么有效? 它可能是一种内联代码,其中分配由编译器而不是函数itseld移动到函数调用。 或者它是一个复制构造函数的东西,其中堆栈对象被复制为一个新的堆栈对象而不是函数调用......

我是c +的新手并试图理解c ++的机制是如何工作的,但是当你开始使用java时,这有点令人困惑:D

提前致谢

1 个答案:

答案 0 :(得分:4)

您正在返回使用复制构造函数构建的堆栈上创建的对象的副本。您没有返回原始对象。

另一方面,如果您尝试将指针返回到堆栈上创建的对象,则会非常破坏。