首页 > 解决方案 > 删除或释放

问题描述

C++ 语言对如何释放指针指向的内存有特定的规则。这些规则要求您知道内存是如何分配的,以便正确释放它。

例如,

int *p = new int();
std::free(p);

导致未定义的行为。(参考

在现代 C++ 中,我们喜欢尽可能使用智能指针,但有时我们可能希望使用分配原始指针的库或函数。假设我想使用以下形式的函数:

char* NotMyFunction();

如何正确管理此函数分配的内存?

标签: c++

解决方案


如何正确管理此函数分配的内存?

您阅读了该函数的文档并执行该文档告诉您的操作以及何时执行,假设首先有任何事情要做。重要的是要记住,并非所有指针都指向动态内存。

示例:规范strdup说:

返回一个指向以 null 结尾的字节字符串的指针,它是 str1 指向的字符串的副本。必须传递返回的指针free以避免内存泄漏。

如果没有可用的文档,您可以阅读源代码以了解该函数的作用,并采取相应措施。如果资源也不可用,那么你就麻烦了,可能需要投资一个水晶球。

除标准函数外,获取动态内存等资源并返回句柄(动态内存情况下为指针)的 C API 通常会提供相应的函数来释放资源。示例:SDL_CreateWindowSDL_DestroyWindow


我推断你说的是以下内容对我来说是正确的吗?通常,如果在 C++ 中给您一个原始指针,则无法保证该指针的正确内存管理。

目前还不清楚你的意思。如果您知道如何管理内存,那么您可以正确地做到这一点。如果您不知道如何管理内存(或者它是否需要由您管理),那么您需要一种查找知识的方法。在 C++ 中没有合理的方法来编写程序,以找出(通过自省)应该如何以及何时释放内存。

类型char*本身并没有说明应该如何处理内存。甚至指针的值也不会告诉您,如果它为空,则它不会指向对象。如果指针不为空,那么它可能指向一个对象。


推荐阅读