포인터가 C++에서 배열을 가리키는 지 여부를 감지하는 방법이 있습니까? 내 문제는 배열의 소유자가되는 클래스를 구현하려는 것입니다. 내 클래스는 포인터로 초기화되고 포인터가 실제로 배열 포인터인지 여부를 알고 싶습니다. 여기서 단순 코드이다포인터가 배열을 가리키는 지 어떤 방법으로 감지하나요?
class ArrayOwner {
public:
explicit ArrayOwner(int* initialArray) : _ptrToArray(initialArray) {}
virtual ~ArrayOwner() { delete [] _ptrToArray; }
private:
int* _ptrToArray;
}
- 사용이 확인 될 것이다 ArrayOwner foo는 (새로운 INT [10]);
- 그러나이 사용법은 입니다. 정의되지 않은 동작이 발생합니다. ArrayOwner foo (new int());
"initialArray"포인터가 실제로 배열 포인터라는 것을 생성자에 assert를 추가하고 싶습니다. 생성자의 계약을 변경할 수 없으며, 벡터 e.t.c를 사용합니다. 이 어설 션을 C++로 작성하는 방법이 있습니까?
대신 Boost Array (http://www.boost.org/doc/libs/1_39_0/doc/html/array.html)와 같은 것을 사용할 수 있는지 고려해야합니다. –
당신이 요구 한 제약 조건을 요구하는 것은 현명한 방법이 아닙니다. 왜 생성자를 변경하거나 std :: vector를 사용할 수 없습니까? –
이 클래스는 C++과 스크립트 간의 상호 작용에 필요합니다. 스크립트는 동적 배열을 할당하고 ArrayOwner로 래핑합니다. 내 수업 내에서 좋아하는 것을 사용할 수 있지만 생성자는 ArrayOwner (int * array) 여야합니다. 나는 초기 배열의 크기를 얻기위한 이식 가능한 방법이 없기 때문에 std :: vector에서 아무 쓸모가 없다. – SadSido