<分区>
我正在从 Objective-C 和 Java 的世界潜入 C++。 Java 教会了我所有的 OOP 知识,而 Objective-C 教会了我手动内存管理。虽然适应 C++ 很容易(该语言绝对不值得拥有它的声誉),但我对一件事感到困惑:
我可以将属性声明为 string my_string
或 string *my_string
。我知道我需要删除第二个,但将其声明为指针有什么好处?
<分区>
我正在从 Objective-C 和 Java 的世界潜入 C++。 Java 教会了我所有的 OOP 知识,而 Objective-C 教会了我手动内存管理。虽然适应 C++ 很容易(该语言绝对不值得拥有它的声誉),但我对一件事感到困惑:
我可以将属性声明为 string my_string
或 string *my_string
。我知道我需要删除第二个,但将其声明为指针有什么好处?
最佳答案
在大多数情况下,使用指针变体根本没有任何好处。
使用它的一个原因是,如果您希望成员在对象销毁后继续存在(如果您不在析构函数中删除它)。然而,这种必要性通常是由糟糕的设计强制执行的,所以我会尽量避免这种情况。
另一个原因(也是更可能的原因)是,如果您希望成员可选地未定义(即您在构造函数中将成员初始化为 NULL/nullptr(c++11),并且每次读取访问检查是否指针仍为 NULL 或实际指向一个值)。这样你就可以推迟初始化。然而,即使在这种情况下,我也建议使用智能指针(c++11 中的 std::shared_ptr 或 c++98 中的 boost::shared_ptr)或 boost::optional...
关于C++ 属性声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21184052/