问答详情
源自:4-9 强者争霸

关于赋值运算重载是否正确的问题?

#include "Dollar.h"

Dollar & Dollar::operator + (const Dollar & doll)
{
    Dollar dollarRes;

    int c = doll.cent + cent;
    dollarRes.cent = c % 100;

    int d = doll.dollar + dollar;
    dollarRes.dollar = d + c / 100;

    return dollarRes;
}

@Redknot,老师, 这个赋值运算符重载内部创建的是一个栈变量,最后将这个栈变量的引用返回了,但是栈变量会随着函数的结束而销毁,那返回的这个对象引用是不是有问题?这样写是对的吗?

提问者:永恒丿丶之火 2024-01-18 22:14

个回答

  • newjeans
    2024-03-12 23:08:26

    是的,这样你返回了一个临时变量的引用也就是地址值给到外界,这样外部其实还能操控你这个地址,但是地址指向的数据已经被销毁了。一般来说,返回引用或者是常引用通常是返回类的私有成员变量,用于提供外部接口,特别的例如Get函数,const Data& Class::GetData() const { return m_data; };这种情况以常引用的方式返回了一个Data变量,同时函数为常函数。