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