c++ - 删除或释放
问题描述
C++ 语言对如何释放指针指向的内存有特定的规则。这些规则要求您知道内存是如何分配的,以便正确释放它。
例如,
int *p = new int();
std::free(p);
导致未定义的行为。(参考)
在现代 C++ 中,我们喜欢尽可能使用智能指针,但有时我们可能希望使用分配原始指针的库或函数。假设我想使用以下形式的函数:
char* NotMyFunction();
如何正确管理此函数分配的内存?
解决方案
如何正确管理此函数分配的内存?
您阅读了该函数的文档并执行该文档告诉您的操作以及何时执行,假设首先有任何事情要做。重要的是要记住,并非所有指针都指向动态内存。
示例:规范strdup
说:
返回一个指向以 null 结尾的字节字符串的指针,它是 str1 指向的字符串的副本。必须传递返回的指针
free
以避免内存泄漏。
如果没有可用的文档,您可以阅读源代码以了解该函数的作用,并采取相应措施。如果资源也不可用,那么你就麻烦了,可能需要投资一个水晶球。
除标准函数外,获取动态内存等资源并返回句柄(动态内存情况下为指针)的 C API 通常会提供相应的函数来释放资源。示例:SDL_CreateWindow
和SDL_DestroyWindow
。
我推断你说的是以下内容对我来说是正确的吗?通常,如果在 C++ 中给您一个原始指针,则无法保证该指针的正确内存管理。
目前还不清楚你的意思。如果您知道如何管理内存,那么您可以正确地做到这一点。如果您不知道如何管理内存(或者它是否需要由您管理),那么您需要一种查找知识的方法。在 C++ 中没有合理的方法来编写程序,以找出(通过自省)应该如何以及何时释放内存。
类型char*
本身并没有说明应该如何处理内存。甚至指针的值也不会告诉您,如果它为空,则它不会指向对象。如果指针不为空,那么它可能指向一个对象。
推荐阅读
- sql - Alasql - 分组并取最大结果
- nginx - 如何根据 URL id 在 Istio 上设置哈希?
- debian - 在`debuild`之后重复`usr`目录
- c++ - 如何动态设置 QProgressBar 样式表?
- excel - Excel - 将数据从单列/单元格转换/提取到多列单元格
- python - 为什么 selenium 不能单击 React JS 元素?不会引发错误
- python - pandas 如何在这行代码中将我的数据转换为类别?
- c# - 底层类未转换为 json
- c# - ASP.NET Core MVC:找不到此本地主机页面
- php - NodeJS 相当于 PHP 的 gzuncompress