假设我们有这门课程:
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;
感谢。
答案 0 :(得分:2)
在第一种情况下,变量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_ptr
和std::shared_ptr
。
何时使用指针在很大程度上取决于具体情况,但通常情况下,您可以通过普通对象和引用来实现目标。
答案 1 :(得分:0)
要使用多态,您需要使用指向类的指针。
http://www.cplusplus.com/doc/tutorial/polymorphism/
另一种情况是嵌入式系统编程或者只要有可用内存的约束,我们更喜欢使用指针,根据需要分配内存并在完成使用后取消分配内存,以便其他人可以在需要时获取内存
答案 2 :(得分:0)
我更喜欢使用指针与继承和虚函数有关。除了作为参数传递给函数时调用的复制构造函数也很有用。指针可让您根据需要自由分配/删除(通过new / delete关键字)。 另一方面,对象的使用将帮助您减少内存泄漏问题,因为当对象超出范围时,系统将自行声明内存。