C++ 属性声明

标签 c++ oop pointers

<分区>

我正在从 Objective-C 和 Java 的世界潜入 C++。 Java 教会了我所有的 OOP 知识,而 Objective-C 教会了我手动内存管理。虽然适应 C++ 很容易(该语言绝对不值得拥有它的声誉),但我对一件事感到困惑:

我可以将属性声明为 string my_stringstring *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/

相关文章:

c# - OO 设计建议 - 需求发生了变化,那么如何重构当前类?

c++ - 返回堆栈变量?

c - 将取消引用的变量传递给函数可以节省内存吗? - C

c++ - 从模板中提取与参数无关的代码

c++ - 如何打印给定字符串的所有可能子字符串?

c++ - 切换案例的替代方案?

python - 为什么在 Python 3 中可以将实例方法称为类方法?

unit-testing - 协调单元测试与 OOD

c++ - 指针数据变化

c++ - 使用 vector<>::push_back() 时如何使用 vector 迭代器