gpt4 book ai didi

c++ - 带有容器类的动态数组的概念?

转载 作者:行者123 更新时间:2023-11-28 00:59:06 24 4
gpt4 key购买 nike

我只是对带有容器类的动态数组一无所知,这里是我如何做的一个例子。

容器类:

class Container{
private:
int n, current;
Class *C;
public:
Container(): C(NULL), n(0), current(0){}
void expandC(int ammount){
Class *NewClass= new Class[ammount];
for (int i = 0; i < n; i++)
NewClass[i] = C[i];
delete []C;
C = NewClass;
n = ammount;
}

};

为什么我在 delete[] C 行上遇到错误?

编辑:如果捕获了三个规则的本质,则意味着您必须定义一个复制构造函数、一个赋值运算符或一个析构函数。在我的例子中,最重要的可能是复制构造函数。
这是我理解在我的案例中应该如何定义它们的方式:

Container(): C(NULL), n(0), current(0){}
Container(int N, vector<string> a){
C = new Class[N];
for(int i = 0; i<n; i++){C->setA(a[i]);}
n=N;
}
~Container(){ delete [] C;}

这是一个很好的做法,我将在未来使用它,但在这种情况下它对我没有帮助。

我在评论中注意到我的错误与访问冲突有关,我将其发布在这里以防万一。

Unhandled exception at 0x53f0edfc (msvcr90d.dll) in dinamicTest.exe: 0xC0000005: Access violation writing location 0xabababab.

这是该程序请求的初始完整版本 http://pastebin.com/djTz36Tu

最佳答案

您出错的最可能原因是您没有遵循 Rule of Three .

请注意,您的类Container 中有一个指针成员C,该指针成员指向动态分配的内存。现在考虑一下您的代码需要创建 Container 类拷贝的场景,由于您没有提供重载的复制构造函数,因此将使用编译器生成的隐式复制构造函数。指针成员将被浅拷贝到新创建的对象中。当发生这种情况时,当其中一个被deleted 时,您的多个指针的对象成员指针指向同一个动态内存,另一个变成悬空指针并导致问题。

关于c++ - 带有容器类的动态数组的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9689670/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com