C ++类指针的动机

Motivation for C++ class pointers

我是C ++的新手,我对C和不同的动态脚本语言有一点经验,比如JavaScript,PHP和一些Ruby和Python。我已经使用面向对象(OO)原则工作,即使不是很长时间,但对我来说,新的事情是C ++确实使用了指向类的指针。 C中的指针对我来说不再是一个谜(至少我希望如此)如果我做对了 - 除非你没有别的选择,否则永远不要使用指针。例外情况是,如果要跟踪特殊变量,或者想要将其传递给函数以更改其值。因为我必须有动力使用指针,我可以在C ++中使用它们。你能参考一个例子吗?我在维基百科上学习过。它是C ++中Builder Design Pattern的一个例子。它们使用Pizza class和PizzaBuilder,它使用m_pizza指向Pizza类的指针。在这里使用指针而不是普通实例的原因是什么?

编辑:

只是为了避免误解

  • 我的意思是什么意思:"C中的指针对我来说不再是一个谜",是我知道它们如何存储在内存中等等。这并不意味着我是一个C-ninja :)

  • 当我说:"我已经工作了,即使不是很长时间,使用面向对象(OO)原则",我的意思不是很长时间,如果不是很有经验,但我乍看之下,我只与高级脚本语言,没有任何其他低级语言的经验,除了C和C没有类。 :)


他们在这个例子中使用指针的原因是它是一个抽象工厂。
其目的是从不同的披萨类中制作披萨制品。

抽象工厂需要保存这些对象而不知道它们在内存中占用了多少空间。这就是为什么你不能在这里使用普通实例作为成员变量。它们的大小因披萨制造商的每个实施而不同。

嗯,我认为这就是这里的想法。在这个例子中,他们总是使用相同的比萨类,但你可以通过从基础比萨饼中获得一个可以生产具有完全不同特征的比萨饼的工厂。然后你需要在抽象披萨生成器中使用指针来抓住披萨。


m_pizza =新比萨饼; constructPizza()方法中的行分配内存并使指针成员变量"m_pizza"指向它。通过使用getPizza(),您将获得指向对象的已分配内存的指针。

除此之外,创建的每个构建器对象都有自己的Pizza指针成员变量。因此,在主要的,每个getPizza()调用后,夏威夷和辣指向的Pizza对象都是不同的对象。

另外,请注意,如果我们在某处有2个相同构建器实例createNewPizzaProduct()的后续调用,则会创建2个对象,但只有最后一个内存将被设置为由成员变量指针指向,从而导致内存泄漏。 (例如,如果m_pizzaBuilder-> createNewPizzaProduct();在Cook的constructPizza()方法中被错误地调用了2次,可能会发生这种情况。我的观点是这里的代码可能更安全,但它似乎没有任何内存泄漏泄漏了它的写法)。