如何解决关于boost::function &
为什么这两个变量的地址(即hoofunc
和Ctx::hookFunc4Boost
) 不一样而Ctx::getBoostHookFun()
返回一个左引用 Ctx::hookFunc4Boost
?
我打算通过返回对 Ctx::hookFunc4Boost
的左引用来避免复制临时对象。
这是代码片段:
#include <boost/function.hpp>
#include <boost/bind.hpp>
#include <iostream>
class Ctx
{
public:
const boost::function<void((void*))>& getBoostHookFun(void)
{
std::cout << "inner hookFunc4Boost:" << (void*)(&hookFunc4Boost) << std::endl;
return hookFunc4Boost;
}
private:
boost::function<void(void*)> hookFunc4Boost;
};
int main()
{
Ctx ctx;
Ctx *pCtx = &ctx;
const boost::function<void((void*))> hookFunc = pCtx->getBoostHookFun();
std::cout << "outer hookFunc:" << (void*)(&hookFunc) << std::endl;
}
输出如下:
inner hookFunc4Boost:0x7fffffffdf28
outer hookFunc:0x7fffffffd540
解决方法
要避免复制,只需将变量更改为引用:
const auto& hookFunc = pCtx->getBoostHookFun();
,
在 JaMiT 的帮助下,我想我找到了答案。
这是一个演示代码(https://coliru.stacked-crooked.com/view?id=12bc35c31c9eb605):
a=np.array([10,11,12,13,14])
a.index(3)
变量 #include <iostream>
class Ctx
{
public:
Ctx(int cnt):m_cnt(cnt){}
const int& getCnt(void)
{
std::cout << "inner:" << (void*)&m_cnt << std::endl;
return m_cnt;
}
private:
int m_cnt;
};
int main()
{
Ctx ctx(6);
Ctx *pCtx = &ctx;
const int cnt = pCtx->getCnt();
std::cout << "outer:" << (void*)&cnt << std::endl;
}
和 cnt
是两个不同的变量。所以他们的地址应该是不同的。调用Ctx::m_cnt
时仍需调用复制构造函数。我说得对吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。