社区
C语言
帖子详情
为什么不允许函数以值返回动态对象why!
nothing707
2003-02-26 12:53:44
真的不可以让函数的值返回动态对象吗?
TClass function()
{
TClass *p = new TClass;
...
return *p;
}
不是挺好的吗? 有何不妥?
...全文
93
14
打赏
收藏
为什么不允许函数以值返回动态对象why!
真的不可以让函数的值返回动态对象吗? TClass function() { TClass *p = new TClass; ... return *p; } 不是挺好的吗? 有何不妥?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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:
JavaScript编码之路【
对象
的增强、ES6新特性之
函数
的默认值设置 、rest参数 (剩余参数)、拓展运算符、
对象
与数组的解构赋值】
ES6
对象
与
函数
增强特性摘要(150字): ES6新增了增强
对象
字面量语法,包括属性/方法简写(同名属性可省略值,方法去掉function关键字)和
动态
计算属性名(用[]包裹表达式)。
函数
方面支持参数默认值(避免逻辑或||的缺陷)、剩余参数(...args收集多余参数)和展开运算符(...用于
函数
调用/数组构造/
对象
浅拷贝)。解构赋值可从数组/
对象
中提取值到变量,数组按位置解构,
对象
按属性名解构,均支持默认值和别名。这些特性提升了代码简洁性和表达力,其中展开运算符和解构赋值在数据处理中尤为实用。
c++临时
对象
以及引用的一些知识
一:先来讲讲什么是临时
对象
。 临时
对象
(临时变量):代码中看不见,隐藏在后台,因此我们无法在程序代码中看见临时
对象
。 临时
对象
的产生条件有两个: 1.为使
函数
调用成功而进行隐式类型转换时用到 2.
函数
返回
值的时候用到 ...
通俗讲解!虚
函数
、
函数
重载、重写的区别
函数
重载 如何讲
函数
重载: What——
函数
重载是什么? why——为什么要用
函数
重载,没有
函数
重载会怎样? how——举例说明怎么使用
函数
重载 ******************************************************************************* 能使名字方便使用,是任何程序设计语言的一个重要特
【Kotlin】高阶
函数
&Lambda&内联
函数
在某些情况下,不带参数的
函数
可与只读属性互换。 虽然语义相似,但是在某种程度上有一些风格上的约定。底层算法优先使用属性而不是
函数
:高阶
函数
(Higher Order Function)是一种特殊的
函数
,它接收
函数
作为参数,或者
返回
一个
函数
。
函数
的基本格式如下: 高阶
函数
的一个很好的例子就是lock
函数
,它的参数是一个Lock类型
对象
和一个
函数
。该
函数
执行时获取锁,运行
函数
参数,运行结束后再释放锁。 在这个例子中,body为
函数
的类型
对象
,该
函数
是一个无参
函数
,而且
返回
值类型是T。调用lock
函数
时,可以传
C语言
70,034
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章