这个问题已经在这里有了答案:
已关闭8年。
我已经使用c++多年了,但是仍然有我没有回答的问题。
我正在定义一个c++类,但对此有一些疑问
问题1:我应该使用指针存储投资还是否?
Investment* investment;
// or
Investment investment;
问题2:为什么?
问题3:万一我使用
Investment investment;
,是否应该以这种方式返回引用Investment & getInvestment();
?我知道我的代码都可以使用,但是我想知道这样做的有效方法。
代码如下:
class Urgency
{
private:
Investment* investment;
public:
Urgency(Investment* investment);
~Urgency(void);
Investment* getInvestment();
};
最佳答案
我通常喜欢在对象较大时使用指针,而在对象较小时使用堆栈对象。指针允许某些事情,例如惰性初始化和前向声明,而堆栈对象则减少了创建自己的副本构造函数所需的可能,并且不必担心在析构函数中显式销毁该对象。 (尽管,您可以使用共享的指针类型的对象来为您执行此操作)此外,堆栈对象的访问速度通常更快,但是在大多数情况下,这不应成为选择一个对象的理由,因为大多数情况下申请微不足道。
在引用您的代码时,通常会返回const Investment &
,以便不允许直接修改Investment对象。如上所述,如果使用原始指针,则应创建一个副本构造函数和一个析构函数,以正确管理对象上的内存。对于指针对象,通常将再次返回const Investment *
,以消除外部调用者直接修改对象的能力。
返回const正确的投资对象时,请注意函数在投资类中的声明方式。如果只是Investment::getNumShares()
,则将无法使用const引用或const指针访问该函数。若要解决此问题,请将所有不将对象修改为const的成员函数(例如Investment::getNumShares() const
)标记为