如果我有以下代码:
int *q = new int(42), *r = new int(100);
r = q;
Run Code Online (Sandbox Code Playgroud)
r现在将指向相同的动态分配对象q.在初始化期间创建的对象会发生什么r?它仍然有效吗?你delete好吗?
我知道写作:
delete q;
Run Code Online (Sandbox Code Playgroud)
将使q和r无效.如果我做了:
delete r;
Run Code Online (Sandbox Code Playgroud)
这不会使q和r无效吗?
即使它确实不会int有价值100 的原始对象仍然悬挂?
在初始化期间创建的对象会发生什么
r?
没有.
它仍然有效吗?
是.
你
delete好吗?
你不能.你刚丢失了它的唯一指针.它将潜伏在程序生命周期的其余部分(甚至超出某些原始操作系统)的后台.这称为内存泄漏.
这是不使用原始指针来管理资源的众多好理由之一.如果你使用智能指针,就不会有泄漏.new除非您确实需要动态分配,否则这也是一个避免的好理由.
不会这样既无效
q和r也?
是.删除对象会使指向它的所有指针无效.这是不使用原始指针的另一个好理由:没有办法告诉它们已经失效了.