非常に長い話を短くして、私の問題の例を挙げます。
プロパティとしてプリミティブ型へのポインターを持つクラスがあるとします。
@interface ClassOne : NSObject
{
int* aNumber
}
@property int* aNumber;
クラスがインスタンス化され、それに応じて aNumber が割り当てられ、値が割り当てられます。
ClassOne* bob = [[ClassOne alloc] init];
bob.aNumber = malloc(sizeof(int));
*bob.aNumber = 5;
次に、このタイプのクラスの別のインスタンスの aNumber 値を割り当てるために、参照によって渡されます。
ClassOne* fred = [[ClassOne alloc] init];
fred.aNumber = bob.aNumber;
次に、Fred の aNumber ポインターが解放され、再割り当てされ、新しい値 (7 など) が割り当てられます。
今、私が抱えている問題。Fred には Bob が持っていたのと同じポインターが割り当てられているので、Bob の aNumber の値は 7 になると思います。そうではありません。なぜなら、何らかの理由でポインターが解放されたが、再割り当てされていないためです (まだポインターを指している)。最初に割り当てられたのと同じアドレスで、現在は解放されています)。ただし、Fred のポインタには、別のメモリ位置に割り当てられた値 7 があります。
なぜこのように振る舞うのですか?私は何を理解していますか?C++ のように動作させるにはどうすればよいですか?
編集:そうです、新鮮な朝、私は本当に悪い、午後5時症候群の例を挙げたことがわかります. 私がやろうとしていることは、次のようなものです:
@interface classOne : NSObject
{
int* numA;
}
@property int* numA;
@implementation...etc
numA が割り当てられ、値が割り当てられます。後で、別のスレッドで (必要なロックなどを使用して)、これが行われます。
int* numB= malloc(sizeof(int));
*numB = 5;
free(RefToClassOne.numA);
RefToClassOne.numA = numB;
numA は解放されますが、numB が指している値が割り当てられません。これは私が望む動作です。
長い話の一部は、openGL に渡される頂点バッファーの一部の頂点数であるということです。ポインターであってはならないことはわかっていますが、座標の float* バッファーも同じように処理され、可変サイズである必要があるため、これを修正してその問題も解決したいと考えています。