码迷,mamicode.com
首页 > 编程语言 > 详细

C++的子类与父类强制转换产生的问题

时间:2015-03-06 16:30:24      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

近日,在项目的一个类中如果碰上想要将子类强制转换成父类,然后再调用其父类版本的virtual虚函数。

就会出现gcc编译错误提示:error: ld returned 1 exit status

gcc提示原因:在link过程中,发现了无法找到的reference symbol, 该reference symbol是此父类的拷贝构造函数。

由此,我推断问题的原因是:在子类转换成父类的过程中,默认地调用了父类的拷贝构造函数。而由于项目中针对大部分类都使用了DISALLOW_COPY_AND_ASSIGN(XXX); 这个宏声明却没实现,相当于禁止了拷贝构造函数。该宏的定义如下: 

#define DISALLOW_COPY_AND_ASSIGN(ClassName) 
ClassName(const ClassName&); void operator=(const ClassName&)

 

解决方法是: 转换其类型,但是不让其使用拷贝构造函数(copy constructor),代码如下:

static_cast<Parrent&>(*this); 

此处使用了Parrent& 而不是 static_cast<Parrent>(*this) , 使用引用而不是类,可以避免copy新的对象, 自然就避免了调用其拷贝构造函数。

 

参考:

1. http://stackoverflow.com/questions/9084835/why-does-static-castthis-to-a-base-class-create-a-temporary-copy

 

C++的子类与父类强制转换产生的问题

标签:

原文地址:http://www.cnblogs.com/ToDoToTry/p/4318429.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!