c++ - 类对象和指针的区别

标签 c++ class object pointers

假设我们有这个类:

class book {
  public:
  book(int pages = 0) {pages = m_pages;}
  getPages() { return m_pages;}
  setPages(int pages) { pages = m_pages;}
  private:
  int m_pages;
};

我一直不明白何时使用指向类的指针,或何时创建它的对象。示例:什么更好,为什么?

book The_lord_of_the_rings;

或:

book* The_lord_of_the_rings;

谢谢。

最佳答案

在第一种情况下,变量 The_lord_of_the_rings 对象。在第二种情况下,变量指向内存中对象所在的其他地方。

让我们尝试一个简单的 ASCII 图像:

在第一种情况下,您有一个对象:

+---------------------------------------+
| The_lord_of_the_rings                 |
| (All data associated with the object) |
+---------------------------------------+

在第二个例子中你有一个指针:

+-----------------------+       +--------------------------------+
| The_lord_of_the_rings | ----> | The actual object and its data |
+-----------------------+       +--------------------------------+

但是:正如 juanchopanza 在评论中指出的那样,指针实际上不必指向有效对象。如果您只是将指针声明为局部变量,则它不会被初始化并指向内存中看似随机的位置。在这种情况下取​​消引用(访问指针指向的数据)会导致未定义的行为,并且实际上可能使程序崩溃。指针在使用前应始终初始化为指向有效对象。


在现代 C++ 中,几乎没有理由使用指针,尤其是原始指针。现在有很好的“智能指针”,比如 std::unique_ptrstd::shared_ptr .

何时使用指针在很大程度上取决于具体情况,但通常情况下,使用普通对象和引用可以走很长一段路。

关于c++ - 类对象和指针的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15290769/

相关文章:

c++ - 在鼠标单击 Qt 时将信号从子级发送到父级

class - 如何向本地类定义的异常添加短信?

python - 如何实例化一个类并打印值

javascript - 使用 requestAnimationFrame 的 JS 游戏循环 - 对象函数仅调用一次

jquery - 在 for 循环 (OOP) 中创建并命名 'n' JQuery 对象

c# - String.ToString 有什么合理的用途吗?

c++ - test.cpp :(. text._ZN1AC2Ev[_ZN1AC5Ev]+0x8)||对 `vtable for A' 的 undefined reference |

c++ - 转换运算符重载

c++ - 使用 const char * 时如何将记录器与模板一起使用?

python - Python 元类有什么用?