社区
C++ 语言
帖子详情
函数参数中new出来的对象怎么释放?
yangbc
2006-11-21 08:52:06
函数参数中new出来的对象怎么释放?
比如 void fuc(new CEntityString("abcd"),1,5)
{
}
这里的new CEntityString("abcd") 出来的空间还需要释放么?
哪位老大讲一下,分数可能不多,大家笑纳
...全文
6277
72
打赏
收藏
函数参数中new出来的对象怎么释放?
函数参数中new出来的对象怎么释放? 比如 void fuc(new CEntityString("abcd"),1,5) { } 这里的new CEntityString("abcd") 出来的空间还需要释放么? 哪位老大讲一下,分数可能不多,大家笑纳
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
72 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
arrowcy
2006-11-26
打赏
举报
回复
我怎么记得在某个地方见到过这种用法,好像是msdn?反正我也就的这种用法有问题,一直没这么用。
良少
2006-11-26
打赏
举报
回复
void fuc(new CEntityString("abcd"),1,5)
{
}
===================================================================
这个函数写得不对。 第一个参数,应该是一个指针,或者对象引用。
new CEntityString("abcd")应该在调用代码中使用。 再在调用代码中释放。不应该在函数中释 放外部生成的对象。否则必然出现错误!
void fuc(CEntityString* temp,1,5)
{
......
delete temp;//此句可以释放内存,避免产生内存泄漏
}
上面这种写法,也是绝对错误的! 会释放已经释放的对象,造成错误!
missilery
2006-11-26
打赏
举报
回复
void fuc(new CEntityString("abcd"),1,5)
{
}
这个就不叫做函数了吧
估计可以这样
void fuc(CEntityString * s = new CEntityString("abcd"),int b=1,float c=2)
{
delete s;
}
xu_yuanjie
2006-11-26
打赏
举报
回复
怎么能这样写呢,到时候谁来释放呢?
keily
2006-11-26
打赏
举报
回复
真郁闷!~
axx1611
2006-11-25
打赏
举报
回复
楼主到底想问什么我还是搞不清楚。不过对于这种写法,并不是一定那么危险和没用,关键是用的人自己得清楚内存到底分配到哪里了,举个例子:
class PStrStack
{
public:
PStrStack() {}
virtual ~PStrStack();
void Push(const string &szNew);
void Push(string *pszNew = new string("abcd"));
private:
vector<string *> m_vecStr;
};
PStrStack::~PStrStack()
{
vector<string *>::const_iterator i = m_vecStr.begin();
for (; i < m_vecStr.end(); i++)
delete *i; // 析构释放string对象空间
}
void PStrStack::Push(const string &szNew)
{
m_vecStr.push_back(new string(szNew)); // 此时string对象空间是由PStrStack分配的
}
void PStrStack::Push(string *pszNew)
{
m_vecStr.push_back(pszNew); // string对象空间由外部分配
}
int main()
{
PStrStack *p = new PStrStack;
p->Push("1234");
p->Push();
string *pStr = new string("try");
p->Push(pStr); // pStr的内存移交给p所指PStrStack对象管理
pStr = NULL; // 避免意外情况,可以先将这个指针置空(根据需要决定)
p->Push(new string("xyz"));
delete p;
return 0;
}
绝不能
string *pStr = new string("string");
p->Push(pStr);
...
delete pStr;
delete p;
这样pStr的空间等于是被delete了两次。。。
happyCore
2006-11-25
打赏
举报
回复
楼上的。。真是不知道楼主在说什么哇。。
zenny_chen
2006-11-25
打赏
举报
回复
To cradmin() :
两者并没有本质上的区别。new操作返回的是动态分配的存储片的首地址,因此在delete时也要用它作为参数。你也可以将new所返回的地址视为memory handle
wstonea
2006-11-25
打赏
举报
回复
长见识了!我正在学c++ 学了相当多的东西
仰望星空WU
2006-11-25
打赏
举报
回复
new出来的都保存在进程的全局堆里,只有自己delete或者给别的对象delete,一定要delete,否则肯定内存leak
jiajiaedu
2006-11-25
打赏
举报
回复
编译没通过.
cradmin
2006-11-25
打赏
举报
回复
不好意思,上面没说完
void main(void)
{
func();
}
想问一下,像这种调用是main函数还是func函数负责调用new来生成的对象,这两者有什么区别吗(是不是在那释放都一样)
我也是新手,不对的地方大家指点!
cradmin
2006-11-25
打赏
举报
回复
to dw14132124()
______________________________
fuc(new CEntityString("abcd"),1,5);
如果这样的函数调用,它在这里生成了临时的一个对象. 它分配了对象所须的空间,然后调用了CEntityString类的构造函数,.它一直作用到函数结束,当函数调用完成时,返回时,生成的这个临时的类会自动被释放.
在这个时候,会调用析构函数,然后释放空间.所以你不必想怎么去释放生成的这个临时对象.
——————————————————————————————————————————
我试了一下,由new生成得对象在其生命周期结束时并没有自动调用对象的析构函数,另外即使在显式调用比如CEntityString的析构函数后,由new申请的那块内存也没有什么变化(应该内存没释放),只有调用delete后那块内存发生了变化(在vc里面看了一下那个地址的内存,改了几个字节,不知道干什了什么),同时还调用了对象CEntityString的析构函数,new和delete应该是成对使用的
想问一下大家,delete时到底做了些什么?
另外 to zenny_chen(ACE Intercessor):
void func(EntityString* = new EntityString("abcd"), int = 1, int = 5)
{
}
liufengping
2006-11-24
打赏
举报
回复
这里new出来的空间当然是需要释放的,要不就是内存泄露了,在函数内构造对象是可以的但是你需要在返回这个构造对象的指针,做好记录,然后适当的时候释放掉它,这种方式一般也是用的比较多的,比如在一个系统中,某个对象(CDog)在系统运行到一定状态是往往需要分派出一个副本常常的做法就是如下申明
CDog* CDog::Clone()
{
CDog* pDog = new CDog;
//code
return pDog;
}
外部释放如下
CDog myDog;
CDog* pCloneDog = myDog.Clone(); //创建副本
delete pCloneDog; //释放副本
如果函数有CDog*形参,就和你的情况是一样的,总之你的函数返回结果应该是new对象的指针
CDog* CDog::Clone( new CDog())
{
//code
return pDog;
}
零点不睡觉
2006-11-24
打赏
举报
回复
新手上路,,在家教下哈,,在哪发问题啊???
零点不睡觉
2006-11-24
打赏
举报
回复
都是高手~~学习一下!
rickerliang
2006-11-24
打赏
举报
回复
笑死我勒~~~~~
yzcurry
2006-11-24
打赏
举报
回复
delete
malligator
2006-11-24
打赏
举报
回复
可以在函数内释放吧
itcsayid
2006-11-24
打赏
举报
回复
楼主是想要嵌套么?
加载更多回复(52)
鹿遥文化创始人&CEO 邓志寅:直播电商的破局之路
而电商直播的核心词是直播,以前直播可能是游戏、娱乐、赛事等等,现在的直播更多是电商了,所以直播电商和电商直播恰好重叠。希望直播电商大潮
中
,我们都能够坚守初心,无论是品牌方还是平台,抑或是协会,我们都能一起去找到直播电商的破局之路,一起去做好自己的差异化,一起让更多的企业产品去服务出海的同时,让世界了解
中
国。第一,在直播电商领域想要破局,一定要用差异化,无论是做内容,还是直播带货,我们希望无论在内容方面,还是在直播带货方面,都能够回归初心, 在直播电商行业里奉献更多力量。在服务出海的同时,让世界了解
中
国。
AI 时代产品经理破局指南:如何从困境
中
崛起?
AI时代,产品经理正经历着从“流程执行者”到“价值创造者”的转型阵痛。这种变革既对产品经理传统的工作带来了冲击,同时也孕育着AI赋能职业跃升的机遇与挑战。
短视频+直播高转化设计:创客匠人揭秘IP变现黄金公式
合伙人关系(深度绑定):“共生型IP”(如创客匠人学员静怡老师,单条视频引流5000粉)。:职场IP用“3个月0成交→单场3.2万”故事切入就业焦虑,短视频转化率提升300%。3.案例共情:真实故事替代理论(例:学员从0到单场43万IP变现路径);5.柔性转化:从“推销”到“邀请”(例:“适合想系统提升的你”)。4.好处承诺:给出可落地方案(例:“今晚学会3个脚本公式”);流量时代,用户不为“内容”停留,而为“解决我问题的方案”付费。2.观点破局:用金句颠覆认知(例:“流量差因无人设”);
AI 时代下,普通人不能错过的五大变现机会
AI非常擅于处理文本、图片、视频相关的工作,在内容创作方面有很大的提效作用,所以市面上很多副业项目,都值得用AI重新再做一遍,例如代写业务,就可以用AI进行代写,口播带货项目,就可以用数字人再做一遍。:目前 AI 存在巨大的科普红利和流量红利 + AI 能够提升创作效率。:无需懂代码,用自然语言跟 AI 提需求,即可生成代码。
618直播风云再起:头部主播声量式微,电商该如何破局?
618众生相:有人抱怨无限卷,有人连夜抓住新机会
C++ 语言
65,213
社区成员
250,514
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章