在这个简化的例子中,我的问题是:我是否在Action :: setUser()内部进行合法赋值?此C++参考分配是否正确?
class User {
private:
int age;
public:
int getAge() { return age; }
};
class Action {
private:
User user;
public:
void setUser(User &u) {
user = u;
}
};
int main() {
User u;
Action a;
a.setUser(u);
return 0;
}
是什么让我噪音,
- 时SETUSER被称为发生了什么行动的 “用户” 属性?它被摧毁了吗?它有史以来建造?
- 如果我第二次调用setUser会发生什么?
- 如果我删除setUser中的“&”符号,一切都会好的,对不对?因为这就像传递参数的副本一样,对吧?
我很担心,我做内存疯狂的事情,因为属性没有被正确地摧毁...
谢谢
编辑于星期一2013年2月18日
非常感谢!我真的很感激你的回应......
我不知道编译器提供了一个默认的重载赋值操作符。现在我知道一切都非常有意义...
再次感谢。
除了可能更好,如果这是'const User&u',那么分配就很好。它将复制用户而不需要中间副本到by-val参数。 Action的现有用户不会被销毁'setUser(u)',而是会通过赋值操作符“覆盖”。如果你想要,你可以通过自己编写一个'User :: operator =(const User&u)'来控制它是如何完成的。关于第二个电话,与第一个电话相同。最后,删除&*将会*引入至少一个额外的副本。 – WhozCraig 2013-02-17 00:47:01
我想知道你写的最后一句话:*“我担心我在记忆中做了疯狂的事情,因为属性没有被正确销毁”* - 你是什么意思?*“被正确销毁”*?你如何看待这个问题? – LihO 2013-02-17 00:53:32