简而言之,我的问题是将成员变量作为非托管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_ptr
或scoped_ptr
)小智 8
是的,有一个指南 - 只在必要时才使用动态分配.很多时候你可以而且应该使用值,而不是指针.例如,您几乎应该总是使用:
vector <string> v;
Run Code Online (Sandbox Code Playgroud)
而不是:
vector <string *> v;
Run Code Online (Sandbox Code Playgroud)
并动态分配字符串.
归档时间: |
|
查看次数: |
502 次 |
最近记录: |