【问题标题】:Deleting one of 2 pointers that point to the same thing删除指向同一事物的 2 个指针之一
【发布时间】:2014-11-29 17:33:27
【问题描述】:

所以我有一个指向对象的指针数组,以及一个指向我代码中其他地方的每个对象的指针。我想要的是当我删除那些其他指针时。我如何重新排列我的指针数组,使其中间没有垃圾值。我有一个检查 NULL 的重新排列函数,但指针不指向 NULL。

void Floor::rearrange(){
    for (int i=0;i<numEnemies;i++){
            if(Enemies[i] == NULL){
                    Enemies[i] = Enemies[i+1];
                    Enemies[i+1] = NULL;
            }
    }

}

【问题讨论】:

    标签: c++


    【解决方案1】:

    使用自动拥有的指针。 shared_ptrweak_ptrunique_ptr可以自动为你解决这个问题,正确使用。

    使用delete 是主要的代码异味。

    【讨论】:

    • 当您可以保证堆对象生命周期的单一所有权时,可以很好地使用删除
    • @foips,正确使用unique_ptr 可以保证您使用类型系统,没有开销。
    【解决方案2】:

    听起来您希望数组中的指针为weak_ptr,然后其他指针应为shared_ptr

    这样,当另一个指针被删除时,您可以安全地检测到它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      • 2015-08-07
      • 1970-01-01
      相关资源
      最近更新 更多