Есть ли способ обнаружить, указывает ли указатель на массив в C ++? Моя проблема в том, что я хочу реализовать класс, который становится владельцем массива. Мой класс инициализируется указателем, и я хотел бы знать, действительно ли указатель является указателем массива. Вот упрощенный код:
class ArrayOwner {
public:
explicit ArrayOwner( int* initialArray ) : _ptrToArray(initialArray) {}
virtual ~ArrayOwner() { delete [] _ptrToArray; }
private:
int* _ptrToArray;
}
- Это будет нормально: ArrayOwner
foo (new int [10]);
- Но это использование
приводит к неопределенному поведению:
ArrayOwner foo (new int ());
Я бы хотел добавить в конструктор утверждение, что указатель «initialArray» действительно является указателем массива. Я не могу изменить контракт конструктора, используйте векторы e.t.c. Есть ли способ написать это утверждение в C ++?