例えば:
class Neuron{
private:
class Dendrite{
private:
//ctor(Neuron& n){..}
Collateral& predecessor;
double Weight;
//public: getters setters
};
class Axon{
private:
class Collateral{
private:
Dendrite& successor;
public:
//ctor(Axon& a){..}
};
List<Collateral> collaterals;
public:
//ctor(Neuron& n){..}
void CreateNewCollateral(){
Collateral c;
this->collaterals.AddByValue(c);
}
};
List<Dendrite> dendrites;
};
Collateral
s のコレクションを所有するには Axon が必要です。しかし、それぞれの樹状突起にneuron.list
は、Neuron の異なるインスタンスに属することができる Collateral の対応するインスタンスへの参照 (またはポインター) が必要です。Neuron のインスタンスごとに、異なる一連の担保が存在する可能性があります。
問題は、Axon のリストに十分な数の新しい担保を追加すると、アイテムをnew
objectO
にコピーしてdelete
、既存の Items からto へE
のポインターを割り当てて、それ自体を拡大する必要があることです。コピーされたすべての資料 (Axon 内) は、おそらく 内とは異なるアドレスを持っています。これにより実行時エラーが発生する可能性があると思いますが、そうですか? どのように解決すればよいですか?O
E
dendrites.predecessor
編集:これは私が List::AddItemByValue() を実装した方法です
long AddItemByValue(const T& item){
if((this->iLastItem+1)==this->Length){
T* tmp = new T[Length*2];
for(long i=0;i<=this->iLastItem;i++){
tmp[i] = this->element[i];
}
delete[] this->element;
this->element = tmp;
this->Length *= 2;
}
this->iLastItem++;
this->element[this->iLastItem] = item;
return this->iLastItem;
}