请教关于 std::tr1:function 自动释放问题?

clxye314 clxye314 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
我在项目中使用了 std::tr1:function,发现,如果这个 function 对象中指定的 对象无效了,则 function 在析构时就会崩溃。


void CDlgMapFind::SearchGeomotry( LPCTSTR lpszGeometry )
{
function<void(SEARCHPROGRESS)> callback = bind(&CDlgMapFind::ProcessCallBack, this, placeholders::_1);
m_pMapHelper->StartSearchFeatures( lpszGeometry, m_vecChecks, callback );
}

void CMapHelperBase::StartSearchFeatures( LPCTSTR featureName, const std::vector<int> &vecLayers, std::function<void(SEARCHPROGRESS&)> callback )
{
m_searchParam.featureName = featureName;
m_searchParam.vecLayers = vecLayers;
m_searchParam.callback = callback;

m_thSearchFeatures.SetThreadProc( bind(&CMapHelperBase::SearchFeatures, this, _1, _2), NULL );
m_thSearchFeatures.Start();
}

void CThread::SetThreadProc( std::function<unsigned (CThread*, void*)> funThread, LPVOID lpParam )
{
m_funThread = funThread;
m_pParam = lpParam;
}


m_searchParam.callback 保存了 CDlgMapFind 对象的 SearchGeomotry 函数地址
m_funThread 保存了 CMapHelperBase 对象的 SearchFeatures 函数地址

当 CDlgMapFind 对象先于 CMapHelperBase 对象之前析构时,这时 m_searchParam.callback 在析构时就会崩溃,原因好像是它会 delete 创建的函数对象,而此时 CDlgMapFind 对象已不存在,因此崩溃了。
CThread::m_funThread 也是会发生类似的问题。

我目前采用的办法是在必须对象被删除前手动对 function 置空。但这种方式不够通用,而且当 function 用的比较多的时候必然会差生因疏忽而导致的崩溃现象。

请问,当 function 对象析构时,有没有办法不调用它的删除操作。或者大家有没有其它更好的办法解决这个问题?

谢谢!!
...全文

相关推荐

PYTHON_TRAIN_Pythontrain_pythontrain()_python简单练习_pythontrain_tr

简单练习python中的文件导入 归一化等。

肝博士杨明博大夫

Windows程序设计的关键技术PPT教案学习.pptx

Windows程序设计的关键技术PPT教案学习.pptx

woshifafuge

boost概览 pdf

boost库是STL之后的标准库的补充和功能的提升

Wziiy

论文复现基于变频与移相协同控制的全桥LLC变换器模式切换平滑性优化(Simulink仿真实现)

内容概要:本文针对“基于变频与移相协同控制的全桥LLC变换器模式切换平滑性优化”这一主题,开展Simulink仿真实现与技术复现研究。通过构建全桥LLC谐振变换器的详细仿真模型,深入探讨在不同负载工况(如轻载、重载、待机与运行模式切换)下,如何结合变频控制(FM)与移相控制(PSM)的协同策略,优化系统动态响应的平稳性与效率。研究重点在于设计合理的控制逻辑,解决模式切换过程中可能出现的电压电流冲击问题,提升系统的稳定性和电能质量。文中系统阐述了控制策略的设计原理、关键参数的整定方法,并通过仿真结果验证了该协同控制方案在抑制瞬态扰动、实现无缝切换方面的有效性,完整复现了高水平学术论文中的核心技术路线,为电力电子变换器的先进控制提供了可复现的实践范例。; 适合人群:电力电子、电气工程及其自动化等相关专业的研究生、科研人员及从事开关电源、新能源变流器开发的工程师,尤其适合具备一定Simulink仿真经验与电力电子拓扑分析能力的专业人士; 使用场景及目标:①深入理解全桥LLC变换器在多模式运行下的变频与移相协同控制机理;②掌握在Simulink中对复杂谐振变换器进行建模、控制算法实现与仿真验证的全流程方法;③为学术论文写作、科研项目申报或高性能电源产品的工程开发提供可靠的技术参考与仿真基础; 阅读建议:建议结合所提供的Simulink模型文件与技术文档进行同步实践,重点关注变频与移相控制的切换逻辑、参数配合关系及过渡过程的动态特性,可通过调整负载条件观察系统的响应变化,以深化对模式切换平滑性实现机制的理解。

大龙不吃小鱼干

高校技术转移办公室人员如何高效完成科技成果全周期管理?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新与产业创新智能化发展。

BIZKEEN
评论 2
收藏 已收藏
分享
返回顶部
clxye314
C++ 语言 65,214 成员 250,514 内容