在第一种情况下,变量The_lord_of_the_rings
是对象。在第二种情况下,变量指向内存中对象所在的其他位置。
让我们尝试一个简单的 ASCII 图像:
在第一种情况下,您有一个对象:
+----------------------------------------------------+
| The_lord_of_the_rings |
| (与对象关联的所有数据)|
+----------------------------------------------------+
在第二个示例中,您有一个指针:
+------------------------+ +------------ --------+
| The_lord_of_the_rings | ----> | 实际对象及其数据 |
+------------------------+ +------------ --------+
但是:正如 juanchopanza 在评论中指出的那样,指针实际上不必指向有效对象。如果您只是将指针声明为局部变量,则它不会被初始化并指向内存中看似随机的位置。在这种情况下,取消引用(访问指针指向的数据)会导致未定义的行为,并且实际上可能会使程序崩溃。指针在使用前应始终初始化为指向有效对象。
在现代 C++ 中,几乎没有理由使用指针,尤其是原始指针。现在有很好的“智能指针”,比如std::unique_ptr
and std::shared_ptr
。
何时使用指针在很大程度上取决于具体情况,但通常使用普通对象和引用可以取得很大进展。