C ++指针对象与非指针对象

可能重复:
为什么你会想要在堆上分配内存而不是堆栈?

Test2 *t2 = new Test2();
t2->test();

Test2 t3;
t3.test();

为什么我要创建一个Test2类型的指针对象? 为什么不只是做Test2的非指针版本? 为什么我想要做指针对象?

在这里找到答案:

  • 为什么你会想要在堆上分配内存而不是堆栈?
  • 什么时候最好使用栈而不是堆,反之亦然?
  • 何时使用“新”,何时不使用C ++?
  • 我应该什么时候在C ++中使用新的关键字?
  • 在C ++中正确的堆栈和堆使用
  • 堆栈,静态和堆在C ++中

  • 使用动态存储的原因包括(但可能不限于)

  • 手动控制对象的生命周期 - 对象将存活直到您明确销毁它
  • 只有在运行时才知道对象的最终数量(如树中节点的数量或数组中元素的数量)时,根据需要创建多个对象。
  • 运行时控制对象的类型(如实际类型的多态对象)。
  • 如果没有区别,最好使用t3方法创建对象。 除非必须,否则不要使用动态内存。 但有时你真的必须(看上面的原因)。


    如果你需要一个对象超过它创建的范围,那么其中一个解决方案就是在堆上创建它。 在这种情况下,你需要一个指针。 还有其他原因,这是最常见的。

    使用指针的另一个原因是“out”参数。 当然你可以使用引用,但很多人喜欢使用指针,因为它避免了在调用站点修改参数。 foo(var); vs foo(&var);

    而且,指针可以用来传递或返回可能存在或不存在的对象。 例如: T *foo(); // returns a pointer to an object or NULL if none exists T *foo(); // returns a pointer to an object or NULL if none exists

    这份名单还在继续。


    如果你有一个非常大的对象(例如一个非常大的缓冲区作为成员),你可能不想在堆栈上分配它,因为堆栈空间是有限的,在这种情况下,你需要在堆上分配new operator。

    链接地址: http://www.djcxy.com/p/13795.html

    上一篇: C++ Pointer Objects vs. Non Pointer Objects

    下一篇: Different methods for instantiating an object in C++