【发布时间】:2019-03-01 12:53:19
【问题描述】:
我想创建一个指向自定义对象 Image 的指针数组,但我不确定我是否做得正确(而且我对指针数组没有任何经验)。我有一个构造函数,它将一个图像作为第一个元素和数组大小,但我认为我没有正确创建图像指针数组。我知道这可能要容易得多,但我不想使用向量。
在头文件中,我有:
class Album {
public:
unsigned arrmax;
Image** imgar;
Image basepic;
在 cpp 文件中我有一个构造函数:
Album::Album(const Image & picture, unsigned max) {
arrmax = max;
basepic = picture; //operator overloaded
imgar = new Image*[arrmax]; //array of Image pointers
for (unsigned i = 0; i < max; i++) {
imgar[i] = NULL;
}
imgar[0] = &basepic;
}
我的析构函数如下所示:
Album::~Album() {
if (imgar != NULL) {
for (unsigned i = 0; i < this->arrmax; i++) {
if (imgar[i] != NULL) {
delete imgar[i]; // delete[] or delete??
}
}
}
}
对于析构函数,在遍历元素后我是否也必须执行delete[] imgar?还是我只是没有删除正确的内容?
【问题讨论】:
-
您可能想使用
std::vector<std::vector<std::unique_ptr<Image>>>并完全忘记手动内存管理。 -
delete你是什么new和delete[]你是什么new[]。如果你既不是new也不是new[],那么你就不是delete也不是delete[]。imgar[i]是指向任何basepic的指针,你似乎没有new它。避免这些问题并使用智能指针,如std::unique_ptr或标准容器。 -
对不起,一个间接的太多了,
std::vector<std::unique_ptr<Image>>就足够了。 -
您真正需要的很可能只是
std::vector<Image> -
现代 c++ 程序通常不应该使用裸指针,使用 shared_ptr 或 unique_ptr。
标签: c++ arrays pointers constructor destructor