reference to non-static member function must be called

在看effective c++时遇到智能指针shared_ptr,在一个类中使用时出现问题,具体的代码见下:

屏幕快照 2016-11-23 13.11.28.png

结果如图所示,在lock类中声明了一个shared_ptr<int> m_p;但是在lock的构造函数中却初始化不了shared_ptr<int> m_p。

首先,需要明确一点,那就是智能指针带处理函数的初始化方法,如:
int m = 5;
void func(int &m){//......}
shared_ptr<int> m_p(&m,func);
以上是初始化一个智能指针m_p,其带有一个后续处理的函数func,这个函数的实参是&m。

简单地了解这个之后,我们回归正题,根据这个智能指针的初始化方法,可以确定在lock类中进行如此初始化是可以的,那为什么还报错?
是因为此时智能指针m_p的处理函数是一个类中的成员函数unlock,且传给智能指针的也是一个函数指针,但是要调用成员函数的话,是需要通过类的实例对象来进行的,而在智能指针中调用的时候,是没有这个实例对象存在的,结果就挂了。

参考:http://stackoverflow.com/questions/22513680/non-static-member-function-must-be-called

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容