我在visual studio 2013中遇到一个断言失败。我写了一个名为Image的类,我想创建一个Image的矢量,但是发生了“Ddebug Assertion Failed”。
这是我的代码:
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
template<typename T> class Image {
public:
Image() : dataptr(nullptr)
{}
Image(int s) : rows(s), cols(s), dataptr(nullptr)
{
dataptr = new T[s * s];
}
Image(int r, int c) : rows(r), cols(c), dataptr(nullptr)
{
dataptr = new T[rows * cols];
}
~Image()
{
if (dataptr != nullptr)
{
delete[] dataptr;
dataptr = nullptr;
}
}
T* const operator[] (int i)
{
return &dataptr[i*cols];
}
private:
int rows;
int cols;
T* dataptr;
};
int _tmain(int argc, _TCHAR* argv[])
{
Image<int> img(3);
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
img[i][j] = i * 3 + j;
}
}
vector<Image<int>> ims(0);
for (int i = 0; i < 3; i++) {
ims.push_back(img);
}
return 0;
}
答案 0 :(得分:0)
您需要为Image类实现自定义副本和分配。编译器生成的那些是浅拷贝的,因此当您将对象复制到向量中时,您将获得双删除,并且随后会对该向量进行破坏。您需要深层副本或shared_pointer。
添加此修复程序:
Image(const Image& i) : rows(i.rows), cols(i.cols)
{
dataptr = new T[rows*cols];
// now actually copy the data...
}