给出以下代码:
[example.h文件]
class MyClass
{
public:
MyClass();
std::string name;
std::string address;
bool method (MyClass &object);
};
[example.cpp]
MyClass::MyClass()
{
}
bool MyClass::method (MyClass &object) {
try {
object.name = "New Name";
std::cout << "Name: " << object.name << " " << object.address << std::endl;
return true;
}
catch (...) {
return false;
}
}
[TEST.CPP]
#include "example.h"
int main()
{
MyClass myC;
myC.address = "address";
bool quest = myC.method(myC);
}
我在上面的myC.method
中调用main
的方式与这种替代方法之间有什么区别:
MyClass *myC = new MyClass();
bool quest = myC.method(*myC);
哪个更好,为什么?
答案 0 :(得分:1)
在这两种情况下,您都可以发送相同的值,但只需坚持使用当前代码就更好了,因为它没有指针取消引用和new
。完成后,您需要处理delete
对象,我认为您不需要它。
最好在MyClass &object const
函数中使用method
,以便传入的引用不会被更改。
答案 1 :(得分:0)
如果您需要对象的持续时间超过其调用函数的范围,则使用new(以及一般的动态内存分配)会更好。如果只是已知持续时间的MyClass myC;
本地范围版本最好(因为它更易于阅读和维护)。
使用new
您的对象时,在致电delete
之前,不会删除“myC”。
但是,如果您只是将其定义为本地对象,则当它超出范围时将被删除:
{
MyClass myC;
myC.DoSomeStuff();
} // It'll be destroyed here