【发布时间】:2010-06-01 15:38:31
【问题描述】:
简而言之,我的问题是关于成员变量作为非托管 C++ 中的指针。
在 java 或 c# 中,我们有“高级指针”。事实上,我们无法察觉其中的“指针”。我们通常这样初始化一个类的成员:
member = new Member();
或
member = null;
但在 c++ 中,它变得更加混乱。我见过很多样式:使用new,或者将成员变量留在堆栈中。
在我看来,使用boost::shared_ptr 似乎很友好,但在 boost 本身的源代码中到处都有news。这是效率的问题,不是吗?
有没有“尽量避免new”之类的准则?
编辑
我意识到说“将它们留在堆栈中”是不恰当的,这是一种更恰当的说法:当我需要一个 object 作为我的成员变量时,我应该更喜欢 object 而不是 object* ?
【问题讨论】:
-
不幸的是,我真的不知道你在问什么。是使用函数中声明的变量、原始指针还是智能指针?
-
它不是“非托管 C++”,它只是 C++,“托管 C++”根本不是 C++——它只是微软的怪物,有点像 C++,但不是 C#。
-
您不会“将成员变量留在堆栈中”。 “留在堆栈中”的概念在这一点上根本不适用。成员变量驻留在整个对象所在的同一内存中。可以是堆栈,可以是静态内存,也可以是动态内存。
-
@ALL:现在我的观点更清楚了(ps:忘记“非托管C++”,我只是想表达我对“托管”方式的爱)