一个纯虚函数导致的问题
win7系统,vc2010下。
程序a静态链接b.dll动态库。
b.dll中导出3个类:
(1) 基类
class afx_ext_class base
{
public:
base(){};
virtual ~base(){};
virtual int getx() = 0;
protected:
int x;
......
}
(2)子类1
class afx_ext_class derived_1
{
public:
derived_1(){};
virtual ~derived_1(){};
int getx() {return x;};
protected:
//int x; x是继承的
......
}
(2)子类2
class afx_ext_class derived_2
{
public:
derived_2(){};
virtual ~derived_2(){};
int getx() {return x;};
protected:
//int x; x是继承的
......
}
函数getx()是为了防止父类实例化而设为纯虚函数。
在程序a中引用该dll,一切都是按规矩来的(头文件包含,引入lib文件)
a中引用 dll中的类:
class a
{
base* pbase;
void oncreateobject(int type)
{
if(type == 0)
pbase = new derived_1();
else
pbase = new derived_2();
}
。。。。。。
}
a程序将oncreateobject与一个菜单命令连接起来,即此函数不是在系统初始化时调用。
编译通过。但在运行中,出现了问题,系统在加载dll过程中意外退出。
通过思考,将base函数中的纯虚函数改变为:
int getx() {return x;};
而将两个子类中的同名函数删除,运行正常。
但问题在哪里? 为什么 ?
可能的原因:
该dll在另一个dll中也被引用,是base的指针形式,引用是通过值传入,并没有new实例,但可能是因为这个才导致程序不能进入吧?
在win10的vc2010中,程序编译就通不过,将纯虚函数改变为虚函数时,才能通过。
各位高手,你们认为呢?
推荐阅读
-
php array_merge函数使用需要注意的一个问题
-
More Effective C++----(12)理解"抛出一个异常"与"传递一个参数"或"调用一个虚函数"间的差异
-
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
-
javascript随机数发现的一个parseInt函数的问题
-
一个纯虚函数导致的问题
-
SpringCache @Cacheable 在同一个类中调用方法,导致缓存不生效的问题及解决办法
-
C++纯虚函数(接口类)的使用
-
关于C++虚函数与静态、动态绑定的问题
-
C++ 子类继承父类纯虚函数、虚函数和普通函数的区别
-
c++ 虚函数 const等的一些小问题记录