C++ 类复制构造函数和指向成员函数的指针
我有一个大程序,其中一些类使用指向成员函数的指针。一般代码结构为:C++ 类复制构造函数和指向成员函数的指针,c++,member-function-pointers,default-copy-constructor,C++,Member Function Pointers,Default Copy Constructor,我有一个大程序,其中一些类使用指向成员函数的指针。一般代码结构为: #include <iostream> using namespace std; /**** CLASS FOO ****/ class Foo { public: Foo(); //constructor
#include <iostream>
using namespace std;
/**** CLASS FOO ****/
class Foo {
public:
Foo(); //constructor
void Fun(){ /* stuff */ }; //some function
void (Foo::*PointFun)(); //pointer-to-member function
inline void POINTFUN() //for readability when calling PointFun
{
return (this->*PointFun)();
}
};
/**** Foo constructor ****/
Foo::Foo()
{
PointFun = &Foo::Fun; //define PointFun
}
/**** main program ****/
int main()
{
Foo p; //calls constructor
p.Fun(); //calls some function
p.POINTFUN(); //calls PointFun
return 0;
}
但我认为这可以由编译器默认给出。另外,我不确定默认析构函数是什么,因为它涉及到一个指针。默认复制构造函数对每个成员变量调用复制构造函数,因此它会自动生成以下代码:
Foo::Foo(const Foo& p)
: PointFun(p.PointFun)
{}
每个析构函数(包括默认析构函数)都会自动对每个成员变量调用析构函数。对于原始指针,这不起任何作用
因为您的代码没有任何动态分配,所以您只需获取方法上的指针,它就可以正常工作
在这种情况下,是否需要定义复制构造函数和/或析构函数
不需要。成员函数指针是可复制的,在销毁之前不需要任何特殊处理。默认函数将做正确的事情
我不确定默认析构函数是什么,因为它涉及到一个指针
只有当指针指向需要手动清理的资源时,才需要在有指针的情况下使用析构函数;例如,如果您分配了具有新属性的内容。在这种情况下,您可能根本不想要指针,而是想要一个智能指针、容器或其他对象,而不是摆弄一个指针并希望您不要掉下来
Foo::Foo(const Foo& p)
: PointFun(p.PointFun)
{}