我最近开始使用 clang 和 XCode 12 在 mac 上进行 C++11 开发,我真的很想更好地了解这个平台。
我正在测试在“空”C++ 程序中重载全局new
和delete
运算符,但我注意到使用全局替换运算符进行的 89new
个分配没有通过全局替换运算符解除分配delete
,这看起来像是内存泄漏。(也许不是,但为什么呢?)
在调试程序时,我发现这些分配都来自wireless_diagnostics::google::protobuf。
所以我的问题是:
- 什么是 Google protobuf,为什么它会出现在我的程序中?
- 为什么它会留下这些内存泄漏(或似乎是内存泄漏)?
- 有什么可做的吗?
这是代码:
#include <iostream>
size_t allocations = 0;
void* operator new(size_t size)
{
void* ptr = malloc(size);
if (!ptr) throw std::bad_alloc{};
allocations++;
return ptr;
}
void operator delete(void* ptr) noexcept
{
free(ptr);
allocations--;
}
int main(int argc, const char * argv[])
{
std::cout << allocations << std::endl;
return 0;
}