bri*_*342 0 c++ arrays destructor copy-constructor
我试图解决我的程序中的一些问题,看起来我的复制构造函数或我的析构函数有问题.我得到了一个内存异常.
任何帮助我都会感谢谢谢
ArrayStorage::ArrayStorage(const ArrayStorage &a):readArray(a.readArray),arraysize(a.arraysize)
{
readArray = new string[arraysize]; //create the array
memcpy (readArray,a.readArray,sizeof(string)*arraysize);//Copy the values of bytes from the location pointed at by the souce and destination.
}
ArrayStorage::~ArrayStorage(void)
{
delete[](readArray);//deconstuctor to delete the array.
}
Run Code Online (Sandbox Code Playgroud)
这将是一个更好的方法来复制除memcpy之外的数组:
for (int i = 0 ; i < arraysize ; i ++)
{
readArray[i] = a.readArray[i];
}
Run Code Online (Sandbox Code Playgroud)
Mat*_*Mat 10
你不能只是memcpy随机对象,你需要用它们的复制操作符实际复制它们.
string很可能拥有指向堆分配存储的指针.如果按位复制,则在原始字符串上调用析构函数会使"复制"字符串的数据无效.
使用类似的东西std::copy正确地做到这一点.
#include <algorithm>
...
std::copy(a.readArray, a.readArray+arraysize, readArray);
Run Code Online (Sandbox Code Playgroud)
我建议你不要像你那样复制字符串.由于字符串保存对堆内存的引用,实际上您复制了指针,因此两个数组中的字符串都在共享内存.这不是c ++ - ish而且非常危险.我建议你使用赋值运算符或复制构造函数的字符串(是做一个循环).