如何在C++中管理成员变量

rha*_*dyn 2 c++ oop pointers

简而言之,我的问题是将成员变量作为非托管C++中的指针.

在java或c#中,我们有"高级指针".实际上,我们无法意识到它们中的"指针".我们通常初始化类的成员,如下所示:

member = new Member();
Run Code Online (Sandbox Code Playgroud)

要么

member = null;
Run Code Online (Sandbox Code Playgroud)

但在c ++中,它变得更加混乱.我见过很多样式:使用new,或者将成员变量保留在堆栈中.

在我看来,使用boost::shared_ptr似乎很友好,但在boost本身的源代码中new到处都有.这是效率的问题,不是吗?

是否有像"尽力避免new"或其他什么的行会?

编辑

我意识到说"把它们留在堆栈中"是不恰当的,这里有一个更恰当的说法:当我需要一个object成为我的成员变量时,我应该更喜欢一个而object不是一个object*

Jam*_*lis 15

Boost源代码不是编写源代码的好例子.Boost库旨在包含所有繁琐,困难且容易出错的代码,以便您不必在代码中担心它.

您最好的选择是遵循代码中的两条通用规则:

  • 不要在不需要使用指针的地方使用指针
  • 你需要使用指针的地方,使用智能指针(如shared_ptrscoped_ptr)


小智 8

是的,有一个指南 - 只在必要时才使用动态分配.很多时候你可以而且应该使用值,而不是指针.例如,您几乎应该总是使用:

vector <string> v;
Run Code Online (Sandbox Code Playgroud)

而不是:

vector <string *> v;
Run Code Online (Sandbox Code Playgroud)

并动态分配字符串.