我需要修改一个非常长的程序,它是由另一个程序员编写的。通过他的代码,您可以看到指向C++对象的双指针。我不明白为什么在这种情况下使用双指针,我认为一个指针会做同样的事情。一个例子更清楚地说明:
class A {
...
public:
static B** b; //why double pointers here?
...
}
Class B {
...
public:
B(...)
func1();
func2();
}我们需要有许多来自B类的对象,比如说5个对象(而不是,一个2D的对象数组)。一旦我们创建了b,代码就不会篡改*b。只有B的函数被b[i]->func1()调用。因此,由于我们不改变指针,我想我们可以通过定义static B* b;来做同样的事情。我是不是忽略了什么?
发布于 2012-02-14 23:39:57
也许程序员需要一个B类型的对象数组,或者从B派生出来的对象数组(或者在将来的程序中根本不阻止这种能力)?因为从B派生的对象可以是不同大小的,所以不能简单地将它们一个接一个地放在数组中--因此增加了引用级别。
在C++中,如果使用boost库,这种行为可以通过boost::ptr_vector或boost::ptr_array相对干净地实现,这将隐藏双指针的丑陋,并防止您执行其他意外错误。
发布于 2012-02-14 23:26:09
如果您需要一个动态(raw)数组的(raw)指针,那么您确实需要一个指针到指针。
当然,C++方式将是智能指针的向量,或者类似的东西。
如果不看到完整的上下文,就很难说出更多的话。
发布于 2012-02-14 23:28:07
在较早版本的Mac上,这些被称为句柄。它们被使用,这样操作系统就可以重新排列内存而不破坏指针。(也就是说,只要只保留指向指针的指针,操作系统就可以移动对象并更改指向它们的指针。)
很难知道在您的情况下发生了什么,但是您可能需要检查是否正在进行某种类似的内存优化。
https://stackoverflow.com/questions/9285742
复制相似问题