C ++指针对象与非指针对象
可能重复:
为什么你会想要在堆上分配内存而不是堆栈?
Test2 *t2 = new Test2();
t2->test();
Test2 t3;
t3.test();
为什么我要创建一个Test2类型的指针对象? 为什么不只是做Test2的非指针版本? 为什么我想要做指针对象?
在这里找到答案:
使用动态存储的原因包括(但可能不限于)
如果没有区别,最好使用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