关于c ++:当你在同一个对象上使用“new”两次时会发生什么?


What happens when you use “new” twice on the same object?

本问题已经有最佳答案,请猛点这里访问。

假设我们有这个……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class MyClass
{
    int value;

    void addIntToObject(int num)
    {
        value = num;
    }

}


MyClass *object = new MyClass();
object->addIntToObject(1);
object->addIntToObject(2);

现在我们再来一次……

1
object = new MyClass();

在同一个对象上使用两次new,是否意味着我们删除了对象中存储的所有数据?有人能给我解释一下在同一个物体上使用两次新物体的确切工作原理吗

这是释放内存的有效方法吗?(比如使用删除和删除[])


你没有"在同一个物体上做两次新动作"。new表达式创建一个对象。通过做两次new,你得到了两个完全不同的物体。

变量object是一个指针。它指向其他对象。指针上的=运算符表示更改指针指向的对象。

所以在代码中有两个对象,您将EDOCX1(指针)更改为指向第二个对象。第一个对象仍然存在,但没有人知道它在哪里,这被称为内存泄漏。


=左边的内容是一个指针,也就是说简单点,它可以包含一些内存位置/对象实例的地址。

当您执行new myclass()->时,此语句的每次执行都将生成myclass的新实例/对象/内存。

所以当你第一次这么做的时候,

1
2
3
MyClass *object1 = new MyClass();
// here object1 now holds the address of object
created by executing 'new MyClass()' suppose that address is 1

现在再创建一个对象,

1
2
3
object1 = new MyClass();
//here object1 now holds the address of object
created by again executing 'new MyClass()' suppose that address is 2

最后,两个对象都保留在内存中,即1和2。所以没有删除任何内容。

指针(左边的=)首先指向了adress为1的对象。现在,它指向地址为2的对象。