有没有办法检测,指针是否指向C ++中的数组?我的问题是我想实现一个类,它成为数组的所有者。我的类用指针初始化,我想知道,指针是否真的是一个数组指针。这是简化的代码:
class ArrayOwner {
public:
explicit ArrayOwner( int* initialArray ) : _ptrToArray(initialArray) {}
virtual ~ArrayOwner() { delete [] _ptrToArray; }
private:
int* _ptrToArray;
}
我想在构造函数中添加assert,“initialArray”指针实际上是一个数组指针。我无法更改构造函数的合约,使用向量e.t.c.有没有办法在C ++中编写这个断言?
答案 0 :(得分:6)
不,不幸的是没有。 C ++ RTTI没有扩展到原始类型。
答案 1 :(得分:5)
没有可移植的方法。
答案 2 :(得分:4)
对我来说,这看起来很糟糕。不要将new分开并以这种方式删除。
数组应该在对象构造函数中分配,而不是作为参数传递。
C ++中的内存管理很难,不要因为这样的不良做法而变得更难。
答案 3 :(得分:1)
我不这么认为。 x[]
和*x
是同义词,当然,除非您在其上调用delete
。
答案 4 :(得分:0)
通常,没有(简单/便携/强健)方法。
话虽如此,如果您了解自己的平台并且愿意为每个新版本的操作系统更改代码,您可能能够找到堆的位置以及它们的外观,因此您可能需要遍历堆并查看此指针指向的块的大小,以便您可以计算其中的项目数。但每个人都会建议你不要这样做。