如何解决在 C++ 中使用动态内存
这个代码正确吗?
int *set_new (int choice) {
int *new_choice {new int};
*new_choice = choice;
return new_choice;
}
返回值后是否应该删除*new_choice
,因为*new_choice
在内存堆上?
int *set_new (int choice) {
int *new_choice {new int};
*new_choice = choice;
return new_choice;
delete new_choice;
}
或者,我需要在函数调用完成的地方删除它吗?如果不删除,会不会造成内存泄漏?
我在一个网站上了解到,如果您在删除(删除)之后立即使用动态内存(新建),则不会出现内存泄漏。
int main () {
int *b {new_choice (23)};
printf ("% d",*b);
delete b;
}
解决方法
您不得删除将要使用的内容。分配给 new_choice
的指针将由 set_new
的调用者使用,因此您不能释放它。
在返回的函数中也不能删除东西,因为return
意味着函数的执行在那个点结束,执行返回给调用者。
int *set_new (int choice) {
int *new_choice {new int};
*new_choice = choice;
return new_choice;
delete new_choice; // this statement won't be reached
}
,
int *set_new (int choice) {
int *new_choice {new int};
*new_choice = choice;
return new_choice;
delete new_choice;
}
delete
行永远不会被执行。函数以 return
语句(等等)结束。如果你尝试在delete
之前移除return
,它会被执行,但是返回的指针将是无效的,所以没有意义。
您的最后一个示例是正确的,您应该在使用完指向对象后delete
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。