我有一个指向某些数据的指针.现在我创建了一个类似的指针.现在,这个新指针被分配给旧指针.如果我删除旧的将会发生什么?
A* a = new A();
A* b = a;
a = NULL;
Run Code Online (Sandbox Code Playgroud)
"a"和"b"会发生什么?
而且,如果我做了以下事情:
A* a = new A();
A* b = a;
delete a;
Run Code Online (Sandbox Code Playgroud)
而且我想知道当我们分配NULL时,指针会发生什么.
A* a = new A();
a = NULL;
Run Code Online (Sandbox Code Playgroud)
一个仍然指向一些记忆或它指向什么?
Mat*_*Mat 14
A* a = new A();
A* b = a;
a = NULL;
Run Code Online (Sandbox Code Playgroud)
在此之后,b
仍然指向第一行中分配的对象.a
现在什么都没有.您仍然可以通过b
指针"使用"对象,并且可以通过删除对象delete b;
.
你可以delete a;
在这里 - 它将没有任何效果(因为a
是NULL),但它是安全的,不会导致未定义的行为.
A* a = new A();
A* b = a;
delete a;
Run Code Online (Sandbox Code Playgroud)
之后delete
,该对象a
,并b
使用指向不再存在.a
并b
因此不再有效的指针,并使用自己的价值,你不能做他们什么.特别是,尝试拒绝指针将导致未定义的行为.(但是,如果使它们指向有效对象,则可以重用这些变量.)
A* a = new A();
a = NULL;
Run Code Online (Sandbox Code Playgroud)
您刚刚泄露了第一行中创建的对象.a
不再指向任何内容,并且您没有该对象的句柄,因此您无法删除它.所以,这是一个普通的旧内存泄漏.
(和第一种情况一样,你可以在线delete a;
后a = NULL;
,但它没有效果,内存仍然泄露.)
Run Code Online (Sandbox Code Playgroud)A* a = new A(); A* b = a; a = NULL;
"a"和"b"会发生什么?
a将为NULL,并且b未经修改
Run Code Online (Sandbox Code Playgroud)A* a = new A(); A* b = a; delete a;
*a
已被删除,并b
变为无效(你不能*b
再过去引用b()过去那一点).
而且我想知道当我们分配NULL时,指针会发生什么.
Run Code Online (Sandbox Code Playgroud)A* a = new A(); a = NULL;
*a
是不是删除,所以内存泄漏.内存不能再被释放(除非你在其他地方有一个指针的副本,但代码没有显示).