我今天看到了一個我不熟悉的new
的用法。這是否會造成內存泄漏?
{
string * test = new string("bye");
new (test) string("hello");
cout << *test << endl; //prints "hello"
delete test;
}
這似乎像它應該在第一,但如果我嘗試和「記住」的test
初始值,它看起來像記憶被重新分配:
string * test = new string("bye");
string * test2 = test;
new (test) string("hello");
cout << *test << endl; //prints "hello"
cout << *test2 << endl; //also prints "hello"
這是怎麼回事?
我不確定你試圖用第二個例子來證明什麼。爲什麼*不會*'cout << * test2'打印你好? – meagar 2014-10-02 02:02:08
放置新的,是的,它泄漏,因爲原始對象的析構函數沒有運行。 – mythagel 2014-10-02 02:02:21
@megar,因爲我已將'test2'分配給'test'的原始值。如果新內存由第二個'new'語句分配,'test'的值應該改變。但事實並非如此。 – 2014-10-02 02:04:05