Re: Copy Constructor with Template Class
* Donovan Parks:
Hello,
I am rather lost about how to properly setup a copy constructors and
operator= with my template class. My class if as follows:
template<class T> class Image
{
private:
IplImage* imgp;
public:
Image(IplImage* img = NULL) { imgp = img; }
~Image()
{
if(imgp != 0)
cvReleaseImage(&imgp);
imgp = NULL;
}
IplImage* Ptr() { return imgp; }
void operator=(IplImage* img)
{
imgp = img;
}
// copy construction
Image(const T& rhs);
T& operator=(const T& rhs);
};
template<class T>
Image<T>::Image(const T& rhs)
{
if(rhs.imgp != NULL && rhs.m_bReleaseMemory)
cvReleaseImage(&rhs.imgp);
Are you sure you want to change the "rhs" object? This looks like
changing the object.
imgp = cvCreateImage(cvGetSize(rhs.Ptr()), rhs.Ptr().depth ,
rhs.Ptr().nChannels);
cvCopyImage(rhs.Ptr(), imgp);
}
It seems that you assume that "rhs" is of type Image.
In that case, the templating isn't actually /used/ for anything.
Why is this class a template?
Try to remove the templatizing.
That may help.
template<class T>
T& Image<T>::operator=(const T& rhs)
{
if ( &rhs == this )
return *this;
if(imgp != NULL &&m_bReleaseMemory)
cvReleaseImage(&imgp);
imgp = cvCreateImage(cvGetSize(rhs.Ptr()), rhs.Ptr().depth ,
rhs.Ptr().nChannels);
cvCopyImage(rhs.Ptr(), imgp);
}
You can express assignment in terms of copy construction. Google up
examples (they involve defining a swap operation).
I am confused about two points. First, although I can compile the
above code, I can not set a break point in either the
Image<T>::Image(const T& rhs) or T& Image<T>::operator=(const T& rhs)
functions. My compiler (VS 8.0) indicates the break points will never
be hit. Secondly, is I am uncertain if they is sufficient to solve the
following problem:
vector< Image<unsigned char> > v;
void main()
"main" must have result type "int".
{
void Foo();
This declares a function Foo, it doesn't call it.
v.at(0).size; // error: memory has already been freed!
No, it has never been allocated.
Cheers, & hth.,
- Alf
--
A: Because it messes up the order in which people normally read text.
Q: Why is it such a bad thing?
A: Top-posting.
Q: What is the most annoying thing on usenet and in e-mail?