我在接受采访时问过这个问题:
在C++中,
- 如果我们分配内存
malloc并使用它delete来释放分配的内存怎么办?- 如果我们使用
new并使用它来释放内存free怎么办?如果在代码中使用上述内容,我们将面临哪些问题?
我的回答是没有区别.这样说我是对的吗?
我的问题不是重复吗?`new`分配的`free()`内存是否安全?.
我正在为POD写一个玩具垃圾收集器,我正在定义我自己的定制operator new/new[]和operator delete/delete[].代码如下:
#include <iostream>
#include <map>
std::map<void*, std::size_t> memory; // globally allocated memory map
struct collect_t {} collect; // tag for placement new
void* operator new(std::size_t size, const collect_t&)
{
void* addr = malloc(size);
memory[addr] = size;
return addr;
}
void* operator new[](std::size_t size, const collect_t&)
{
return operator new(size, collect);
}
void operator delete(void *p, const collect_t&) noexcept
{
memory.erase(p); // should call ::operator delete, no recursion
free(p);
}
void operator …Run Code Online (Sandbox Code Playgroud)