在网上查到的解答:CObject类,以及继承自它的所有MFC控件类,都是不能够复制的。为什么不能复制,我马上想到了CObject的拷贝构造函数,于是查看CObject类的定义,发现CObject的拷贝构造函数是私有的。
private:
CObject(const CObject& objectSrc); // no implementation
void operator=(const CObject& objectSrc); // no implementation
当调用CListCtrl类的参数作为形参的函数,会调用CListCtrl类的拷贝构造函数,这时会先调用父类CObject的拷贝构造函数,而刚才已经说了,CObject的拷贝构造函数是私有的,所以这样就会编译报错error C2248: “CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)。这时的你可能会突发奇想,为什么CObject类的拷贝构造函数是私有的,在我看来,是想彻底屏蔽这样的调用,所以解决error C2248的方法就是使用引用的形参。
然而你可能又会想到,为什么拷贝构造函数的形参是类对象的引用而不是类对象,拷贝构造函数的参数使用引用类型不是为了减少一次内存拷贝, 而是避免拷贝构造函数无限制的递归下去。下面网址的那篇文章写的不错,也解开了我的迷惑。
参考文章地址:http://blog.csdn.net/tunsanty/article/details/4264738