为了账号安全,请及时绑定邮箱和手机立即绑定

对象成员指针能不能从栈上实体化,

视频中都是指导从堆上实体化,如对象成员指针在堆上实体化对象成员,main函数中在堆上实体化Line 类。

那么有没有什么操作 比如在Line 中的构造函数中把对象成员指针在 栈上 实体化呢?


正在回答

3 回答

Node *p;

Node m(3);

*p = m(3); 赋值无法通过

p = &m(3); 赋值可以通过

 这是为什么

Node 是类

上面搞错了

0 回复 有任何疑惑可以回复我~
#1

qq_慕虎1144658

m(3)意思是把3传入Node类的带参构造函数里面,这不是一个值,你怎么可能拿来赋值?要么你那个Node类 例如Node(int a){b=a;}(b是你类里面定义的一个变量) m(3)就相当于你把 a=3传进去了 你想访问你可以写个get函数把b return出来,在用p->get() 你这个完全就是在瞎搞嘛 要是你想这么用也可以 看图
2019-03-01 回复 有任何疑惑可以回复我~
#2

qq_慕虎1144658

#include <stdio.h> #include <string> #include <stdlib.h> int main(){ int *p=NULL; int m(3); p=&m; *p=m; }
2019-03-01 回复 有任何疑惑可以回复我~

Node *p;

Node m(3);

*p = m(3); 赋值无法通过

p = &m(3); 赋值无法通过

 这是为什么

Node 是类

0 回复 有任何疑惑可以回复我~
#1

慕斯6434274 提问者

卡在这里想了一天了
2018-10-26 回复 有任何疑惑可以回复我~

只有使用new的指针,所指对象是在堆上。不使用new分配内存的都是在栈上。

你要非在栈上实体化,先创建对象成员,然后用指针指向成员地址就行了。


注意这样一个问题:Node *p;和 Node *p = new Node;的区别是什么?

都是node类型的指针,前者也就是node *p程序结束后会自动删除(栈上),后者new node不会自动删除,会用到delete函数删除(堆上)。

不自动删除的话,可以自己控制,方便在其他地方调用,在合适的时间再手动删除。


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之封装篇(下)
  • 参与学习       70919    人
  • 解答问题       514    个

封装--面向对象三大特征之一,通过案例让C++所学知识融会贯通

进入课程

对象成员指针能不能从栈上实体化,

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信