如何在不删除指针指向的数据的情况下删除指针?

Fak*_*ken 7 c++ pointers

我有一个指向数组的指针和另一个引用相同数组的指针.如何删除这些指针中的任何一个而不杀死数组,以便第二个未删除的指针仍然有效?

例如:

int* pointer1 = new int [1000];
int* pointer2;
pointer2 = pointer1;
Run Code Online (Sandbox Code Playgroud)

现在我想摆脱pointer1,我将如何做到这样我可以通过pointer2继续正常访问数组?

Cor*_*sky 12

那些指针在堆栈上; 你不必删除它们.只是忽略pointer1它,它会在块结束时消失.

  • @Faken-要清楚,"指针只是堆栈上的变量"并不是真正的陈述.代码示例中的指针是一个堆栈变量,因为您是静态声明它.一个指针也可以动态声明,正如Neil Butterworth在他的例子中所示.这就是你如何声明它,对象作为指针并没有什么特别之处. (3认同)
  • @bta:我没有看到任何静态声明.也许你的意思是"自动",实际的术语.(也就是说,事情不是堆栈分配,而是自动分配.) (3认同)

Edw*_*nge 10

让它超出范围?

你没有'删除'指针,你删除了他们指向的东西.因此,如果您只想摆脱变量'pointer1',那么唯一的方法就是将它创建的范围终止.


Jam*_*lis 10

你根本没有传递那个指针 delete.你只是停止使用该指针.如果要确保不再通过该指针访问该数组,可以将其设置为null.

C和C++不会跟踪指向对象或数组的指针数量.如果你想要引用计数,你需要使用引用计数容器,shared_ptr或者在这种情况下,shared_array(你可以在Boost中找到这两个容器,你的实现很可能已经<memory>std命名空间中或in std::tr1).