0

例えば:

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;
};

Collaterals のコレクションを所有するには Axon が必要です。しかし、それぞれの樹状突起にneuron.listは、Neuron の異なるインスタンスに属することができる Collat​​eral の対応するインスタンスへの参照 (またはポインター) が必要です。Neuron のインスタンスごとに、異なる一連の担保が存在する可能性があります。
問題は、Axon のリストに十分な数の新しい担保を追加すると、アイテムをnewobjectOにコピーしてdelete、既存の Items からto へEのポインターを割り当てて、それ自体を拡大する必要があることです。コピーされたすべての資料 (Axon 内) は、おそらく 内とは異なるアドレスを持っています。これにより実行時エラーが発生する可能性があると思いますが、そうですか? どのように解決すればよいですか?OEdendrites.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;
}
4

0 に答える 0