0

假设我们有这个类:

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;

谢谢。

4

3 回答 3

2

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

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

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

+----------------------------------------------------+
| The_lord_of_the_rings |
| (与对象关联的所有数据)|
+----------------------------------------------------+

在第二个示例中,您有一个指针:

+------------------------+ +------------ --------+
| The_lord_of_the_rings | ----> | 实际对象及其数据 |
+------------------------+ +------------ --------+

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


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

何时使用指针在很大程度上取决于具体情况,但通常使用普通对象和引用可以取得很大进展。

于 2013-03-08T09:35:34.383 回答
0

要使用多态,您需要使用指向类的指针。

http://www.cplusplus.com/doc/tutorial/polymorphism/

另一种情况是在嵌入式系统编程中,或者当可用内存受到限制时,我们更喜欢使用指针,在需要时分配内存并在完成使用后取消分配内存,以便其他人在需要时可以获得内存。

于 2013-03-08T09:46:39.097 回答
0

当与继承和虚函数有关时,我更喜欢使用指针。摆脱作为参数传递给函数时调用的复制构造函数也很有用。指针使您可以根据需要自由分配/删除(通过 new/delete 关键字)。另一方面,使用对象将帮助您减少内存泄漏问题,因为当对象超出范围时系统将自行声明内存。

于 2013-03-08T09:51:46.090 回答