gpt4 book ai didi

c++ - 类复制构造函数和指向成员函数的指针

转载 作者:太空宇宙 更新时间:2023-11-04 13:37:21 25 4
gpt4 key购买 nike

我有一个大程序,其中一些类使用指向成员函数的指针。一般的代码结构是:

#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)     //Foo copy-constructor
{
PointFun = p.PointFun;
}

Foo::~Foo() {} //Foo destructor

但我认为这可能是由编译器默认给出的。另外,我不确定默认的析构函数,因为涉及到一个指针。

最佳答案

Do I need to define a copy-constructor and/or destructor in this case?

没有。成员函数指针是可复制的,在销毁前不需要任何特殊处理。默认函数会做正确的事情。

I am not sure about the default destructor since there is a pointer involved.

如果指针指向需要手动清理的某些资源,则只需要在存在指针的情况下使用析构函数;例如,如果您使用 new 分配了一些东西。在这种情况下,您可能根本不需要指针,而是智能指针、容器或其他 RAII对象,而不是摆弄指针并希望您不要丢弃它。

关于c++ - 类复制构造函数和指向成员函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com