让我们说有这个......
class MyClass
{
int value;
void addIntToObject(int num)
{
value = num;
}
}
MyClass *object = new MyClass();
object->addIntToObject(1);
object->addIntToObject(2);
现在让我们说再来一次......
object = new MyClass();
通过在同一个对象上使用new两次,这是否意味着我们删除了存储在对象中的所有数据?有人可以向我解释在同一个对象上使用两次新的确切工作方式
这是一种释放内存的有效方法吗? (比如使用删除和删除[])
答案 0 :(得分:7)
你没有在同一个对象上做两次"。 new
表达式创建一个对象。通过执行new
两次,您创建了两个完全独立的对象。
变量object
是指针。它指向其他对象。指针上的=
运算符意味着更改指针指向的对象。
因此在您的代码中有两个对象,您将object
(指针)更改为指向第二个对象。第一个对象仍然存在,但没有人知道它在哪里,这被称为内存泄漏。
答案 1 :(得分:0)
=左侧的东西是一个指针,简单来说它可以包含一些内存位置/对象实例的地址
当你做新的MyClass() - >每次执行此语句都将生成MyClass
的新实例/对象/内存所以当你第一次这样做时,
MyClass *object1 = new MyClass();
// here object1 now holds the address of object
created by executing 'new MyClass()' suppose that address is 1
现在再次创建一个对象,
object1 = new MyClass();
//here object1 now holds the address of object
created by again executing 'new MyClass()' suppose that address is 2
最后两个对象都保留在内存中,即1也是如此2.所以没有任何内容被删除。
指针(=的左侧)首先指向带有地址1的对象。现在,它指向具有地址2的对象。