がありdouble** mat
、すでに初期化されているかどうかをテストしたいと考えています。そうでない場合は、メモリ領域を割り当てます。これは稼働していますか?:
if(!mat)
{
mat = new double*[dim1];
for(int i = 0 ; i < dim1 ; i++)
mat[i] = new double[dim2];
}
何をテストしていif(! mat)
ますか?
ありがとう
がありdouble** mat
、すでに初期化されているかどうかをテストしたいと考えています。そうでない場合は、メモリ領域を割り当てます。これは稼働していますか?:
if(!mat)
{
mat = new double*[dim1];
for(int i = 0 ; i < dim1 ; i++)
mat[i] = new double[dim2];
}
何をテストしていif(! mat)
ますか?
ありがとう
何をチェックインしているか:
if (!mat)
mat
指している場所がNULL
(0) の場合です。
これは、ポインターのデフォルトがゼロの場合、またはポインターを次のように宣言した場合にのみうまく機能します。
double ** mat = NULL;
if (!mat)
はかなり省略形です
if (mat==nullptr)
(nullptr は C++11 キーワードです。NULL マクロまたはリテラル 0 も使用できます)。
もちろん、これは、「mat」が実際に nullptr で初期化されている場合にのみ意味があります。たとえば、それがグローバル/静的変数であるため (これらは自動的に発生します)、または nullptr で初期化した場合です。
個人的には、「!mat」のような構造は好きではありません。ここではブール値ではなくポインターについて話しているため、常に nullptr 比較を明示的にします。
mat
チェックの前に、ポインターを NULL (0) または nullptr (c++11 の場合) 値で初期化する必要があります。if (!mat)
ポインター値を true または false でチェックします。NULL または nullptr は常に false 値であり、その他は true 値です。そのようなif (mat == NULL)
またはif (mat == nullptr)