【 在 lobachevsky 的大作中提到: 】
: 我试了一下,简化成了下面的样子(当然比你的例子复杂一点).
: 本质上,我需要在gfunc(实际上在另外一个文件里面)里面去调用执行myclass里面的函数指针.所以写得有点啰嗦:
: #include <iostream>
: ...................
>>int (Test::* padd_func)(int, int) = &Test::add;
padd_func 是类的一个成员变量,但是, 并没有类实例与之对应,
因此, 没有对应内存空间使之初始化, 这样写是错误的,除非声明静态成员,
不需要类实例去分配空间, 而是使用类的共享空间,这个空间通常编译器会在数据区分配好空间。
Test::Test()
{
// register function pointer to gfun
gfun.add = padd_func;
//gfun.add = &this->add;
}
在构造函数里面, 用自己的成员去初始化外部变量, 怎么看都不是一个好的做法,
很可能因为继承关系, 导致成员的值不一致, 例如, 你用基类值更新了外部变量,
但是,这个基类值在子类里面更新了, 这个时候外部变量和基类值就不一致了。
另外, 类对象本身并没完全初始化, 引到外部一些操作可能有隐患。
--
FROM 115.171.244.*