gpt4 book ai didi

c++ - 删除由两个指针引用的对象指针

转载 作者:行者123 更新时间:2023-11-28 01:10:18 25 4
gpt4 key购买 nike

我有话要说。

ClassA *obj1 = new ClassA;

ClassA *ptr1 = obj1;
ClassA *ptr2 = obj1;

当我执行 delete ptr1; 时,它会影响 ptr2 吗?如果是这样,什么是正确的解决方案?

最佳答案

(假设 obj2 应该是 obj1)

ClassA *x 定义了一个可以指向 ClassA 类型对象的指针。指针本身不是对象。

new ClassA 分配(并构造)类型为 ClassA 的实际对象。

因此 Class A *obj1 = new ClassA; 行定义了一个指针 obj1 ,然后将其设置为指向一个新分配的 ClassA< 类型的对象.

Class A *ptr1 = obj1; 定义了一个指针 ptr1 然后将其设置为指向 obj1 指向的同一事物到,也就是我们刚刚创建的 ClassA 对象。

Class A *ptr2 = obj1; 这行之后,我们有三个指针 (obj1, ptr1, ptr2) 都指向同一个对象。

如果我们执行 delete ptr1;(或者等效地,delete obj1;delete ptr2;),我们会销毁指向的对象。这样做之后,任何指向该对象的指针都将无效(这回答了你的第一个问题:是的,它会影响 ptr2 因为 ptr2 不会之后指向一个有效的对象)。

正确的解决方案取决于您要实现的目标:

  • 如果您想要对象的两个拷贝,假设 ClassA 有一个复制构造函数,请执行 ClassA *ptr2 = new ClassA(*obj1);。完成后,您需要单独删除这个新对象!
  • 如果您想要两个指向同一个对象的指针,请考虑使用类似 boost::shared_ptr 的东西(google 一下)

嗯,对于这样一个简单的 q+a,文字太多了。嗯。

关于c++ - 删除由两个指针引用的对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3775427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com