C++数据成员:值与指针

C++ data members: Value vs. Pointer

本文关键字:指针 数据成员 C++      更新时间:2023-10-16

我正在开始开发一个重要的个人项目,想在这样做之前问一个关于数据成员的问题。

我意识到引用和指针之间的巨大差异。但是,在我最近的研究中,我没有发现太多(如果有的话(关于数据成员指针之间差异的澄清。

请考虑以下两个类定义:

class A
{
private:
const std::string someString_;
};
class B
{
private:
const std::string *someString_;
};

A类和B类的成员数据之间有什么区别/细微差别?知情的答案和相关文章将不胜感激。

这里也提出了类似的问题。

基本上,通过使用值,您可以复制副本,通过使用指针,您可以保存内存地址。

复制意味着您已经有一个变量类型的实例,并且在执行分配时只是复制其内容。

指针表示变量可以保存实例的内存地址或 null(无实例或无效状态(。您可以编辑指针的值或内容。通过修改您持有另一个内存地址的值,通过修改指针的内容,您实际上是在编辑该内存地址上的内容。

实际上,您显示的类 A 在实例化时会创建一个 std::string。而 B 类只有一个 std::string 的地址。

您可以使用 A 构造函数中的 A someString_。但是,在尝试修改 B someString_的内容之前,您应该创建一个新的 std::string 或在 B 的构造函数中传递对 std::string 的引用。