使用" new"会发生什么?两次在同一个对象上?

时间:2017-08-03 04:31:06

标签: c++

让我们说有这个......

class MyClass
{
    int value;

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

}


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

现在让我们说再来一次......

object = new MyClass();

通过在同一个对象上使用new两次,这是否意味着我们删除了存储在对象中的所有数据?有人可以向我解释在同一个对象上使用两次新的确切工作方式

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

2 个答案:

答案 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的对象。