函数怎样返回一个使用了new的局部变量指针

popoppoaw 2014-07-24 10:17:20
菜鸟一个,对指针很迷惑,我尽量说明白问题哈

我要从函数func1()获得返回的指针赋值给a,像这样Fkey* a = func1(XXX);
要初始化,所以用用new,但是要return这个指针就不能delete了,怎么解决

FKey *a = getKey(seed);

FKey *getKey(typename seed)
{
int value = func(seed);
FKey * temp = new FKey;
temp -> key1 = value;
return temp;
}


是不是a 就等于temp了 delete a 就行了?可是会报错啊
...全文
518 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
robertbo 2014-07-25
  • 打赏
  • 举报
回复
使用 FKey *a = new FKey; void getKey(typename seed, FKey *a) { int value = func(seed); a -> key1 = value; } /**/ delete a; 这样把new和delete都放到外面,用参数作为返回值就可以。
排山和倒海 2014-07-25
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/825838.htm?fr=aladdin,here
排山和倒海 2014-07-25
  • 打赏
  • 举报
回复
FKey *getKey((char *) &p)
{
    int value = func(seed);
   p = NULL; 
   p = new FKey;
}
你可以试一下这种方式,把指针作为引用传递进去,还有和六楼说的一样,如果要求高的话,需要安全指针吧,auto_ptr, shared_ptr 还有boost里面的,总之,需要自己要控制资源管理器,虽然我现在和你做的也差不多,也是这种方法,不过我的都是小demo了
FeelTouch Labs 2014-07-25
  • 打赏
  • 举报
回复
用这个安全性智能指针,就不需要考虑太多:std::auto_ptr 我的智能创意,请支持一下
lm_whales 2014-07-24
  • 打赏
  • 举报
回复
你这个在程序退出的时候释放即可。 如果觉得不好掌握时机,可以用智能指针
lm_whales 2014-07-24
  • 打赏
  • 举报
回复
delete 只关心地址(指针的值)和类型。 分配和释放 new --->delete new[]--->delete [] 只要对应就好 当然,不要在DLL中分配内存,EXE 中释放。 PS: 只要指针类型指针指向的内存地址不错误。 指针的名字,其实和分配,释放没关系。
brookmill 2014-07-24
  • 打赏
  • 举报
回复
顺便多说几句,内存的原则是谁分配谁释放,这样简单清楚,容易维护。 这种getKey返回指针的方式,虽然可行,但是不易维护。不管谁调用了getKey,要求他必须把返回的指针delete,文档和注释一定要强调。
勤奋的小游侠 2014-07-24
  • 打赏
  • 举报
回复
这个写法没有问题,报什么错?是不是你的Fkey析构函数没有写对
brookmill 2014-07-24
  • 打赏
  • 举报
回复
delete a 应该没问题呀,报什么错?

64,651

社区成员

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

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