在阅读了一些教程后,我得出结论,一个人应该总是使用对象的指针。但在阅读一些在堆栈上创建QPaint对象的QT教程(http://zetcode.com/gui/qt4/painting/)时,我也看到了一些例外。所以现在我很困惑。什么时候应该使用指针?
发布于 2009-03-18 13:54:57
首先,问题是错误的:困境不是在指针和堆栈之间,而是在堆和堆栈之间。您可以将对象放在堆栈上,并将指针传递给该对象。我假设你真正想问的是你是应该声明一个指向类的指针还是一个类的实例。
答案是,这取决于您想要对对象做什么。如果对象必须在控件离开函数后存在,则必须使用指针并在堆上创建对象。例如,当您的函数必须返回指向创建的对象的指针或将该对象添加到调用函数之前创建的列表时,您将执行此操作。
另一方面,如果对象是函数的局部对象,那么最好在堆栈上使用它。这使编译器能够在控件离开函数时调用析构函数。
发布于 2009-03-18 13:19:08
除了其他人提出的观点(特别是w.r.t.控制对象的生存期),如果你需要处理空对象,你应该使用指针,而不是引用。可以通过类型转换创建空引用,但这通常不是一个好主意。
发布于 2009-03-18 13:41:43
在这种情况下,我实际上使用指针:
class Foo
{
Bar* bar;
Foo(Bar& bar) : bar(&bar) { }
Bar& Bar() const { return *bar; }
};
在此之前,我使用了从构造函数初始化的引用成员,但编译器在创建复制构造函数、赋值操作符和批处理时遇到了问题。
戴夫
https://stackoverflow.com/questions/658133
复制相似问题