指向自定义结构的指针

时间:2011-05-19 22:01:05

标签: c++ arrays class pointers struct

我遇到类似于此处列出的问题pointer-to-a-pointer-to-a-struct-giving-headache 我的问题是不同的,因为我不想要LISTOFONES的多个实例,我想要ONE的指针的多个实例,如

class ONE {  
    int id;  
    char *name;  
};

class LISTOFONES {
    ONE **pointers;
    char *name;

    LISTOFONES ();
    ~LISTOFONES ();
};  

如何使用
对指针变量进行正确且内存安全的初始化 1-纯c ++ ..不是stl容器
2- 100%动态不[]数组限制
3-完全内存安全(所有指针也安全地指向有效的类)

修改
这不是家庭工作
为了我想要的我只想知道在'指针'变量中正确初始化指针的方法是什么

修改
我正在尝试实现指针指针指向的指针列表(数组) 每个指针指向 ONE 结构

1 个答案:

答案 0 :(得分:2)

如果是我,我会分配ONE* s数组:

pointers = new ONE*[reserve];

我会安排pointers数组的前几个成员指向有效的ONE对象。最后剩下的成员都将为零(不是必需的,因为它们永远不会被引用。)

当我需要增加数组时,我会用更大的尺寸调用new:

newPointers = new ONE*[newReserve];

我会将之前数组中的所有指针复制到新数组中。

void
LISTOFONES::push_back(const ONE& one) {
  if(_size>=_reserve) {
    std::size_t newReserve = _reserve?(_reserve*2):1;
    ONE** newPointers = new ONE*[newReserve];
    std::copy(this->pointers, this->pointers+_size, newPointers);
    std::fill(newPointers+_size, newPointers+newReserve, (ONE*)0);
    std::swap(this->pointers, newPointers);
    _reserve = newReserve;
    delete[] newPointers;
  }
  this->pointers[_size] = new ONE(one);
  ++_size;
}