指向C++对象的双指针
double pointers to C++ objects
我需要修改另一个程序员编写的一个非常长的程序。浏览他的代码,你可以看到指向C++对象的双指针。我不明白为什么在这种情况下使用双指针,我认为单指针也可以做同样的事情。一个例子更清楚地表明了这一点:
class A {
...
public:
static B** b; //why double pointers here?
...
}
Class B {
...
public:
B(...)
func1();
func2();
}
我们需要有B
类中的许多对象,比如说5个对象(而不是对象的2D数组)。一旦我们创建了b
,代码就永远不会篡改*b。b[i]->func1()
只调用B的函数。所以,既然我们不改变指针,我想我们可以通过定义static B* b;
来做同样的事情。我是不是忽略了什么?
也许程序员需要一个类型为B或从B派生的对象数组(或者在未来的程序中不阻止这种能力)?因为从B派生的对象可能具有不同的大小,所以不能简单地将它们一个接一个地放在数组中,因此需要额外的引用级别。
在C++中,如果您使用boost库,boost::ptr_vector
或boost::ptr_array
可以相对干净地实现这种行为,这将隐藏双指针的丑陋性,并防止您犯其他意外错误。
如果您想要一个(原始)指针的动态(原始)数组,那么您确实需要一个指向指针的指针。
当然,C++方式将是智能指针的矢量,或者类似的东西。
如果没有看到完整的上下文,很难再多说什么。
在旧版本的Mac操作系统上,这些被称为句柄。使用它们是为了使操作系统能够在不破坏指针的情况下重新排列内存。(也就是说,操作系统可以移动你的对象并更改指向它们的指针,只要你只保留一个指向指针的指针。)
很难知道你的情况发生了什么,但你可能想看看是否有类似的内存优化正在进行。
如果它是一个指针,那么,你是对的,它将是指向B对象实例的指针列表。
有双指针的事实并不一定意味着他试图创建一个B对象的2D数组。也许他试图使B对象列表不是B对象列表,而是对B对象的引用列表(例如指向B对象的指针)。
也许在应用程序存储指向B对象的指针而不是对象本身的上下文中,这听起来是个好主意?
不管怎样,就像我说的,双指针并不总是意味着双列表。
指向某个东西的指针用于告诉代码在哪里找到该东西或将该东西放在哪里。因此,当您需要告诉代码在哪里找到指针或在哪里放置指针时,会使用指向指针的指针。
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它