游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2338|回复: 6

关于函数内对象的生存问题

[复制链接]

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
发表于 2007-6-5 19:26:00 | 显示全部楼层 |阅读模式
在一个函数内部定义了一个对象,是不是返回对象的值可以,但返回这个对象的指针就不成了,无论是不是把这个指针传给了一个函数外部的对象?

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-6-5 19:51:00 | 显示全部楼层

Re:关于函数内对象的生存问题

小心栈对象在函数结束时会被销毁, 如果返回指针, 小心指针指向垃圾.

154

主题

4567

帖子

4579

积分

论坛元老

Rank: 8Rank: 8

积分
4579
QQ
 楼主| 发表于 2007-6-5 20:34:00 | 显示全部楼层

Re:关于函数内对象的生存问题

那怎么处理栈内的临时对象呢,想返回这个对象,只能返回它的值么?或者我传进来一个堆内的对象,附魂一下…… = =? 啊,混乱了

32

主题

1259

帖子

1351

积分

金牌会员

Rank: 6Rank: 6

积分
1351
发表于 2007-6-5 21:07:00 | 显示全部楼层

Re:关于函数内对象的生存问题

当然,你只能传一个他的副本出来, 就是传值出来.

0

主题

199

帖子

199

积分

注册会员

Rank: 2

积分
199
发表于 2007-6-6 11:53:00 | 显示全部楼层

Re:关于函数内对象的生存问题

虽然是一个初级的问题。但这个问题在C++中还真没有一个统一的解决方案。

32

主题

1583

帖子

1589

积分

金牌会员

Rank: 6Rank: 6

积分
1589
发表于 2007-6-6 20:26:00 | 显示全部楼层

Re:关于函数内对象的生存问题

嗯,那你只好在堆内分配对象了,然后传回指针。。

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-6-8 13:48:00 | 显示全部楼层

Re:关于函数内对象的生存问题

楼主要先去理解一下c++的内存模型, 这对你以后理解c++运行状况是很有帮助的.
我简单说点吧:

c++ 分为内存分两种, 一种是静态的(就是程序运行就分配好,然后到程序结束才释放掉的内存), 这个是外部变量,常量,还有函数内static变量等.

一种是动态的.

动态分两种, 一种为栈内存, 一种为堆内存.

栈是一个程序运行就开始分配好的一大段空间(大约2m左右, 可以设置编译器选项调节), 这个空间是提供给函数调用使用的.

比如函数里面定义的变量所需要的空间, 只要一调用这个函数,就开始分配. 当调用该函数结束, 就自动释放掉这个占用的空间, 让其他函数调用来使用. 这种也成为自动内存空间.

但是自动往往并不是那么方便, 因为只要一结束调用, 就失去空间的所有权了, 所以在调用结束之前, 应该想办法将变量的值拷贝出去. 函数返回就是这样的机制. 但是试图返回指向变量的指针, 那是错误的, 因为当函数返回后, 你这个变量的所有权已经归还给系统, 再进行操作是不稳定的.

然后说说堆内存. 操作系统提供一个内存申请的接口, 通过这个接口可以随意分配系统所剩下的没有被分配的内存. 而且, 这些内存的所有权完全由程序员自己所管理, 除非调用释放内存的接口, 否则系统不会占用你所分配的空间.
这个接口, 在c++ 就是malloc函数 和 new关键字 等.

虽然堆内存灵活性最大, 却也是最麻烦的, 因为要你自己负责管理.


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 05:42

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表