我今天看到了一个我不熟悉的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