#include "RegionsSingleImage.hpp"
#include <iostream>
#include <vector>
using std::vector;
using std::cerr;
using std::cout;
using std::endl;
RegionsSingleImage::RegionsSingleImage(std::string fName){
#ifdef __CVLOADIMAGE_WORKING__
im = cvLoadImage(fName.c_str(), CV_LOAD_IMAGE_COLOR);
#else
im = readImage(fName.c_str(), CV_LOAD_IMAGE_COLOR);
#endif
if(im == NULL)
{
cerr << "Could not read image from " << fName << endl;
assert(false);
}
list = new std::vector<Region *>;
}
RegionsSingleImage::RegionsSingleImage(IplImage *I)
{
assert(I != NULL);
im = cvCreateImage(cvGetSize(I), I->depth, I->nChannels);
cvCopy(I, im, 0);
list = new std::vector<Region *>;
}
RegionsSingleImage::~RegionsSingleImage()
{
if(list)
for(unsigned int i=0; i< list->size(); i++)
if(list->at(i))
delete(list->at(i));
delete(list);
cvReleaseImage(&im);
}
我需要让我的析构函数虚拟,因为它处理抽象对象,但我不知道我可以在哪里放置'virtual'关键字或如何根据布局组织代码。谢谢你的帮助!
答案 0 :(得分:1)
您将virtual
关键字放在标头声明"RegionsSingleImage.hpp"
中。
答案 1 :(得分:1)
您只需将其声明为virtual
,例如
class RegionSingleImage {
..
virtual ~RegionSingleImage();
}
请注意,这必须在您要存储指针的层次结构的第一个对象上完成,并且仅针对它,因为它将在任何子类中隐式虚拟(与每个virtual
方法一样)