C++  不用new 声明一个对象指针,分配的内存是在堆上还是栈上?

姜团长 2017-09-23 11:15:29
class Aobj
{
int x;
int y;
};

{
Aobj *f;
f->x = 1;
f->y = 2;
}

1、上面代码 Aobj *f 只是声明了一个野指针,是不是 运行到 f->x = 1;这句,编译器会自动分配一块Aobj类型的内存,并且让f指向这块内存?
2、f 指向的这块内存是在栈上还是堆上分配的,如果是在堆上的,需要手动释放吗?如果不需要,是因为不是自己主动申请的,所以编译器自己会释放掉吗?

C++菜鸟 求助……
...全文
990 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
啊大1号 2018-07-06
  • 打赏
  • 举报
回复
引用 4 楼 destory27 的回复:
Aobj *f; 会调用构造函数和析构函数吗?

C++中如果声明一个对象指针时没有分配内存,那么不会调用构造函数。
一个指针在内存中也是有内存空间的。
在现在大多数机器上指针都是32位的,也就是4个字节。
如果你声明指针。例如,假设A是一个类
A *pa;
这内存中会分配4个字节的空间存储一个地址。只不过地址是不可以用的,因为它没有有效的指向某一个有用的内存空间。这和你声明一个int类型是一样的。
int p;
内存中也会分配4个字节空间给p来存储一个整形值,只不过这个整形值不是可用的,或者是垃圾的。
但是对应你说的调用构造函数。其实指的是
A *pa=new A;
这个时候,就会调用A的默认构造函数。它会在内存中分配内存,而且把这个有效的内存地址存储到指针变量pa的4个字节空间中。
姜团长 2017-09-28
  • 打赏
  • 举报
回复
引用 6 楼 u011583120 的回复:
正确的写法呢?

Aobj *f = new Aobj;
要为f申请内存,用过了再delete
赵4老师 2017-09-25
  • 打赏
  • 举报
回复
理解讨论之前请先学会如何观察http://edu.csdn.net/course/detail/2344 C语言指针与汇编内存地址-一.代码要素
大米粥哥哥 2017-09-24
  • 打赏
  • 举报
回复
得先手动分配内存吧 .......
勤奋的小游侠 2017-09-24
  • 打赏
  • 举报
回复
不会分配内存,->只是在野针上面加上一个偏移值,野指针是1000,f->y就是访问1000+4,报不报错就看1004能不能被访问
热血打工人 2017-09-24
  • 打赏
  • 举报
回复
正确的写法呢?
www_adintr_com 2017-09-24
  • 打赏
  • 举报
回复
编译器不会自动分配内存, 指针的内容是随机得, 指向的内存位置也是随机的
destory27 2017-09-24
  • 打赏
  • 举报
回复
Aobj *f; 会调用构造函数和析构函数吗?
姜团长 2017-09-23
  • 打赏
  • 举报
回复
我已经知道了……这样的用法不行,运行会re出错……

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧