ポインタがC++で配列を指しているかどうかを検出する方法はありますか?私の問題は、配列の所有者になるクラスを実装したいということです。私のクラスはポインタで初期化されており、ポインタが本当に配列ポインタであるかどうかを知りたいと思います。ここで簡略化されたコードは次のとおりポインタが配列を指しているかどうかを検出する方法はありますか?
class ArrayOwner {
public:
explicit ArrayOwner(int* initialArray) : _ptrToArray(initialArray) {}
virtual ~ArrayOwner() { delete [] _ptrToArray; }
private:
int* _ptrToArray;
}
- この使用はOKであろう:ArrayOwner FOO(新しいINT [10])。
- ただし、この使用法 は、未定義の動作につながります。 ArrayOwner foo(new int());
"initialArray"ポインタが実際には配列ポインタであることをコンストラクタでassertを追加したいと思います。コンストラクタの契約を変更することはできません。ベクターを使用します。 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