This topic created in 4501 days ago, the information mentioned may be changed or developed.
比如:
struct Node
{
int val;
Node(int v) : val(v) {}
};
int main()
{
Node *a = new Node(3); //这样子
Node b(5); //和这样子
return 0;
}
目前知道的就是new是在heap上分配的,效率可能低一些;还有b的那种方式不能用->的指针符访问对象的元素,有什么其他实质性的不同吗?
6 replies • 1970-01-01 08:00:00 +08:00
 |
|
1
Wins0n Feb 19, 2014
要记得delete
|
 |
|
2
timothyqiu Feb 19, 2014
Node *a = new Node(3) 的意思是:
1. 在堆上创建一个 Node 对象 2. 在栈上创建一个名为 a 的指针指向它
Node b(3) 的意思是:
1. 在栈上创建一个 Node 对象,名为 b
p.s. a->val 是 (*a).val 的语法糖而已...
|
 |
|
3
ivanlw Feb 19, 2014 via iPhone
所以,实际中用起来应该如何选择呢?
|
 |
|
4
wog Feb 19, 2014
再补充楼上的一下
虽然a 和b 出了main的作用域都会失效,但是a指向的实体,只要不delete,会一直存在。b不用delete
|
 |
|
5
baka Feb 19, 2014 1
一般不在栈上实例化,并且对象传参时都会使用指针形式(或c++引用),避免复制栈存储。 另外,指针形式支持多态,可以根据虚表选择继承链上的类。
|
 |
|
6
ivanlw Mar 11, 2014
@ baka 多谢……可是,如果在栈上实例化,那么传参的时候也可以用引用的吧?
|