SadSido
SadSido

Reputation: 2551

Any way to detect whether the pointer points to array?

Is there any way to detect, whether the pointer points to array in C++? My problem is that I want to implement a class, that becomes the owner of the array. My class is initialized with the pointer and I would like to know, whether the pointer is really an array pointer. Here is the simplified code:

class ArrayOwner {
public:
   explicit ArrayOwner( int* initialArray ) : _ptrToArray(initialArray) {}
   virtual ~ArrayOwner() { delete [] _ptrToArray; }
private:
   int* _ptrToArray;
}

I would like to add assert in the constructor, that the "initialArray" pointer is really an array pointer. I cannot change the contract of the constructor, use vectors e.t.c. Is there any way to write this assert in C++?

Upvotes: 4

Views: 1694

Answers (5)

Alexis Bietti
Alexis Bietti

Reputation: 49

It looks like a bad design to me. Don't separate new and delete this way.

The array should be allocated in the object constructor, not passed as a parameter.

Memory management in C++ is hard, don't make it harder with bad practice like this.

Upvotes: 4

Aaron Digulla
Aaron Digulla

Reputation: 328614

I don't think so. x[] and *x are synonyms except, of course, when you call delete on them.

Upvotes: 1

Rom
Rom

Reputation: 4199

Generally, there is no (simple/portable/robust) way to do that.

Having said that, if you know your platform and you're willing to change your code for every new version of the OS, you might be able to find out where the heaps are and how they look like, so you may want to walk the heap and see the size of the block which this pointer points to, so you can calculate the number of items there. But everyone will advice you against doing that.

Upvotes: 0

Binary Worrier
Binary Worrier

Reputation: 51711

No, unfortunately not. C++ RTTI does not extend to primitive types.

Upvotes: 6

Drakosha
Drakosha

Reputation: 12165

There's no portable way to do it.

Upvotes: 5

Related Questions