社区
C语言
帖子详情
为什么不允许函数以值返回动态对象why!
nothing707
2003-02-26 12:53:44
真的不可以让函数的值返回动态对象吗?
TClass function()
{
TClass *p = new TClass;
...
return *p;
}
不是挺好的吗? 有何不妥?
...全文
84
14
打赏
收藏
为什么不允许函数以值返回动态对象why!
真的不可以让函数的值返回动态对象吗? TClass function() { TClass *p = new TClass; ... return *p; } 不是挺好的吗? 有何不妥?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
maurice1983
2003-02-27
打赏
举报
回复
TClass* function()
{
TClass *p = new TClass;
...
return p;
}
我比较赞同这种改法!简单明了!
你的那种写法一定会漏内存!
wshcdr
2003-02-26
打赏
举报
回复
chinajiji(菜鸟叽叽)不是一般的强啊!
chinajiji
2003-02-26
打赏
举报
回复
真的不可以让函数的值返回动态对象吗?
TClass function()
{
TClass *p = new TClass;
...
return *p;
}
不是挺好的吗? 有何不妥?
你的方法: 内存泄漏无法避免.
因为funtion返回后,p消失,无法delete;
改一:
TClass* function()
{
TClass *p = new TClass;
...
return p;
}
TClass *pT = funtion();
....
delete pT;
改二:
TClass& function()
{
TClass *p = new TClass;
...
return *p;
}
TClass &rT = function;
....
TClass *p = &rT;
delete p;
改三:
std::auto_ptr<TClass> function()
{
std::auto_ptr<TClass> auto_pT(new TClass);
return auto_pTp;
}
std::auto_ptr<TClass> auto_pTClass = funtion();
//delete is not required now;
改五:
TClass* function()
{
static TClass obj;
...
return &obj;
}
改六:
TClass function()
{
TClass obj;
...
return obj;
}
sea_lover
2003-02-26
打赏
举报
回复
可以返回!
#include <iostream>
class object
{
private:
char *ch;
public:
object(){ch=new char[20];}
~object(){delete[] ch;}
char *function();
};
char *object :: function()
{
ch="fdsafdas";
return ch;
}
void main()
{
object a;
char *aa;
aa=a.function();
}
简单写的!不知道符不符合你的要求!
-----------------------------------------
【◇SeaLover◆〗
/ \
★---CSDN---☆
\ /
【○Trust Me●〗
flysundy
2003-02-26
打赏
举报
回复
学习,auto_ptr?
acange
2003-02-26
打赏
举报
回复
TClass function()
{
TClass *p = new TClass;
...
return *p;
}
你这样是可以的, 因为这个内存块是在堆上分配的, 这个内存一直存在到你delete到他为止。
但你要小心, 如果你在你的function里面分配的是栈上的地址的话, 那就会有麻烦了。比如
char* function()
{
char p[100];
p[100]="from stack";
return p;
}
这个p[100]里面的内容会在函数返回前被清空, 所以千万不要这样。
象菜鸟jiji说的, 你这样作的不好之处事, 以后管理不好, 谁知道你这个内存快是 new 的,还是 malloc, 或者别的。。为了解决这个内存管理的问题你可以用auto_ptr.
Flamesong
2003-02-26
打赏
举报
回复
chinajiji(菜鸟叽叽)牛,老牛。楼主结帖吧!
Zark
2003-02-26
打赏
举报
回复
这样的代码
TClass function()
{
TClass *p = new TClass;
...
return *p;
}
是不妥的,其原因是p所指的堆内存将无法释放.不信?!你试试在哪里加一个delete能释放那块内存?
yatuor
2003-02-26
打赏
举报
回复
改五强,亏你想得出来
改六朴实无华最好
yatuor
2003-02-26
打赏
举报
回复
你说的对,返回对象指针只能在自己写的程序中用,不能给别人调用的。
比如说链表的插入就是这样的
请教一下:auto_ptr是什么意思,怎么用
chinajiji
2003-02-26
打赏
举报
回复
当然可以,问题是返回一个对象的指针在内存管理上在点麻烦,就是:这个返回的指针别人真知道一定是new出来的?如果是,什么时候delete呢?
为了解决这个内存管理的问题你可以用auto_ptr.
yatuor
2003-02-26
打赏
举报
回复
事实上是可以的,没人说不可以阿。
不过最好是这样
TClass* function()
{
TClass *p = new TClass;
...
return p;
}
如果按你的写法,返回的是一个对象,不好使用,
比如说
TClass a;
a=function();
调用了TClass拷贝构造函数。
TClass a;
//...
a=function();
调用了TClass‘='操作符。
用户 昵称
2003-02-26
打赏
举报
回复
局部的指针,外面消失了。
hot1985
2003-02-26
打赏
举报
回复
mark
为什么在Vue组件中的data只能
返回
函数
引言: 通过Vue构造器传入的各种选项大多数都可以在组件里用,唯独只有data选项有区别,在Vue构造器中data
返回
的是
对象
,但是在组建中必须
返回
一个
函数
。why?先来看下面一个例子:HTML:
c++临时
对象
以及引用的一些知识
一:先来讲讲什么是临时
对象
。 临时
对象
(临时变量):代码中看不见,隐藏在后台,因此我们无法在程序代码中看见临时
对象
。 临时
对象
的产生条件有两个: 1.为使
函数
调用成功而进行隐式类型转换时用到 2.
函数
返回
值的时候用到 ...
通俗讲解!虚
函数
、
函数
重载、重写的区别
函数
重载 如何讲
函数
重载: What——
函数
重载是什么? why——为什么要用
函数
重载,没有
函数
重载会怎样? how——举例说明怎么使用
函数
重载 ******************************************************************************* 能使名字方便使用,是任何程序设计语言的一个重要特
C语言scanf
函数
用法详细解释!!!
函数
名: scanf 功 能: 执行格式化输入 用 法: int scanf(char *format[,argument,...]); scanf()
函数
是通用终端格式化输入
函数
,它从标准输入设备(键盘) 读取输入的信息。可以读入任何固有类型的数据并自动把数值变换成适当的机内格式。 其调用格式为: scanf("",); scanf()
函数
返回
成功赋值的数据项数,出错时则
C++ 虚
函数
和
函数
重载
函数
重载 如何讲
函数
重载: What——
函数
重载是什么? why——为什么要用
函数
重载,没有
函数
重载会怎样? how——举例说明怎么使用
函数
重载 ******************************************************************************* 能使名字方便使用,是任何程序设计语言的一个重要特征。
C语言
70,020
社区成员
243,264
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章