首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >指向C++对象的双指针

指向C++对象的双指针
EN

Stack Overflow用户
提问于 2012-02-14 23:23:50
回答 5查看 2.5K关注 0票数 1

我需要修改一个非常长的程序,它是由另一个程序员编写的。通过他的代码,您可以看到指向C++对象的双指针。我不明白为什么在这种情况下使用双指针,我认为一个指针会做同样的事情。一个例子更清楚地说明:

代码语言:javascript
复制
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;来做同样的事情。我是不是忽略了什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-02-14 23:39:57

也许程序员需要一个B类型的对象数组,或者从B派生出来的对象数组(或者在将来的程序中根本不阻止这种能力)?因为从B派生的对象可以是不同大小的,所以不能简单地将它们一个接一个地放在数组中--因此增加了引用级别。

在C++中,如果使用boost库,这种行为可以通过boost::ptr_vectorboost::ptr_array相对干净地实现,这将隐藏双指针的丑陋,并防止您执行其他意外错误。

票数 2
EN

Stack Overflow用户

发布于 2012-02-14 23:26:09

如果您需要一个动态(raw)数组的(raw)指针,那么您确实需要一个指针到指针。

当然,C++方式将是智能指针的向量,或者类似的东西。

如果不看到完整的上下文,就很难说出更多的话。

票数 2
EN

Stack Overflow用户

发布于 2012-02-14 23:28:07

在较早版本的Mac上,这些被称为句柄。它们被使用,这样操作系统就可以重新排列内存而不破坏指针。(也就是说,只要只保留指向指针的指针,操作系统就可以移动对象并更改指向它们的指针。)

很难知道在您的情况下发生了什么,但是您可能需要检查是否正在进行某种类似的内存优化。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9285742

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档