0
嗨,我最近正在做一些阅读,并决定尝试实现自定义运算符新,所以我可以登录到一个文本文件时分配内存和删除内存泄漏。C++自定义运算符新
我立即遇到的问题之一是当我重载新函数并在其中放置一个打印时,函数被调用两次。
我想知道这是否正确,如果是这样,为什么?
#include <iostream>
#include <string>
void* operator new(size_t size)
{
void* storage = malloc(size);
std::cout << "Hello World! ";
return storage;
}
int main()
{
std::string *s = new std::string("test");
std::cout << *s;
return 0;
}
结果:
的Hello World!你好,世界!测试
编辑:尝试没有字符串类,现在它只做了一次。我认为下面有一些东西会使用惰性初始化创建两次。但仍然需要澄清一些。
有可用于该工具,将让你的生活变得更加简单,并且更加健壮不是简单地提供定制'new'和'delete'运营商。花时间学习如何使用它们。 – 2014-12-07 04:44:30
@CaptainObvlious这是我个人学习的目的 – 2014-12-07 04:45:24
'new'被调用两次,因为它被称为一个来创建'string',然后再次创建缓冲区以保存字符串数据。 – 2014-12-07 04:47:40