终于学会了C++的大部分基础知识之后,仍然缺少拼图部分。我们举个例子:
class MyClass {
/// ...
};
void f1(MyClass& cl) {
}
void main() {
MyClass cl; // Calls the constructor
MyClass *ptr = nullptr; // Declares a pointer.
ptr = &cl; // Now points to the object above.
f1(cl); // working by mentioning the object
f1(*tr); // working by dereferencing.
}
现在,我不明白当函数返回简单的类名时该怎么做(不是像
MyClass *
这样的指针,也不是像MyClass&
这样的引用:
MyClass f3() {
MyClass c = nullptr; // is this even allowed?
// .... Within the function, c gets assigned to some other already existing object.
return c;
}
// caller:
MyClass c = f3();
MyClass *ptr = ?????; // <--- what comes here to invoke f3()?
MyClass& ref = ?????; // <--- what comes here to invoke f3()?
那么,我的问题是,如何将返回值类型为
MyClass
(不是指针,不是引用)的函数的返回值分配给调用者中的指针或引用? MyClass obj = nullptr
是否有意义,或者我应该更喜欢修改函数以返回MyClass *
?
MyClass f3() { MyClass c = nullptr; // is this even allowed? // .... Within the function, c gets assigned to some other already existing object. return c; }
在上面的例子中,它没有任何意义,因为
c
不是一个指针。
后来
c
是按值返回的,所以就做了一个copy。这很容易,因为MyClass
是一个简单的类,但是如果该类具有动态分配的内存,您将需要阅读三/五/零规则。