2016-11-15 6 views
1

Hell'o、 私は、ポインターであるメンバーベリッシャーを持つクラスを持っています。メンバポインタを初期化せずにこのクラスのインスタンスを作成すると(何らかのメモリまたはnullを指している - 何でも)、このポインタはメモリ内で行われますか?たとえば、ボタンのインスタンスを作成しようとしていますが、ユーザーはクリックに効果があるかどうかを判断できます。つまり、ボタンクラスはサウンド用のメモリを予約してはいけません(ユーザーが選択した場合)。ポインタはメモリ内で発生しますか?

+4

はい。通常、ポインタは32または64ビット幅です。 –

+0

しかし、それはサウンドオブジェクトのスペースを取らないでしょう。 – derM

答えて

6

ポインタ自体のメモリは確保されますが、ポインタが指すオブジェクトのメモリは予約されません。

この場合、オブジェクトのコンストラクタでポインタにnullptr(またはC++ 03以前を使用している場合はNULL)の値を割り当てる必要がありますが、デザインを変更してオブジェクトを変更することを検討します不必要な(例えば、ボタン付きサウンドとボタンなしサウンドの2つのクラスを持ち、何らかの継承を使用するなど)。 nullptrを割り当てることは、ポインタが実際に何かを指し示しているかどうかをチェックするのに便利な値です。現代のデスクトップシステムでは、誤ってアクセスした場合にクラッシュする可能性が非常に高くなります(実際には保証されません) 。クラッシュはあなたのプログラムが奇妙で予期しないことをやっているよりも優れているかもしれません。おそらくデータが壊れていて、永遠に追跡することができます!

ポインタ自体のスペースはかなり小さくなります(64ビットIntelアーキテクチャでは8バイトと思われますが、これはもちろん保証されていません)。

0

低レベルでは、Cのポインタは実際には整数です。コンパイラでは、整数よりも多くのことを行うことができますが、整数へのポインタや逆もまた可能です。

そうですね、あなたのポインタはメモリ内の領域(整数のサイズ、おそらく32ビットで4バイト、64ビットで8バイト)を占有します。

好きではない場合は、別のデザインを見つける必要があります。

関連する問題