C++语言有关于如何释放指针所指向的内存的特定规则.这些规则要求您知道如何分配内存以正确释放它.
例如,
int *p = new int();
std::free(p);
Run Code Online (Sandbox Code Playgroud)
导致未定义的行为.(参考)
在现代C++中,我们喜欢尽可能使用智能指针,但有时我们可能希望使用分配原始指针的库或函数.假设我想使用以下形式的函数:
char* NotMyFunction();
Run Code Online (Sandbox Code Playgroud)
如何正确管理此功能分配的内存?
如何正确管理此功能分配的内存?
您阅读该函数的文档并执行该文档告诉您的操作以及何时执行此操作,假设首先要做的事情.重要的是要记住并非所有指针都指动态内存.
示例:说明strdup:
返回指向以null结尾的字节字符串的指针,该字符串是str1指向的字符串的副本.必须传递返回的指针
free以避免内存泄漏.
如果没有可用的文档,您可以阅读源代码以查看该函数的功能,并采取相应的措施.如果这个来源也不可用,那么你就会陷入麻烦之中,可能需要投资一个水晶球.
除了标准函数之外,获取动态内存等资源并返回句柄(动态内存情况下的指针)的C API通常会提供相应的函数来释放资源.示例:SDL_CreateWindow和SDL_DestroyWindow.
我推断你说的如下是否正确?通常,如果在C++中给出一个原始指针,则无法保证对该指针的正确内存管理.
目前还不清楚你的意思.如果您知道如何管理内存,那么您可以正确地执行此操作.如果您不知道如何管理内存(或者它是否需要由您管理),那么您需要一种方法来查找知识.在C++中没有合理的方法来编写程序,以便(通过内省)计算出应该释放内存的方式和时间.
类型char*本身没有说明应该如何处理内存.如果指针的值为null,那么即使指针的值也没有告诉你,它也不会指向一个对象.如果指针为非null,则它可能指向一个对象.
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |