草庐IT

C_Func_using_Func_ptr

全部标签

c++ - 通过 unique_ptr 和自定义删除器使用自动扣除

我目前正在使用一个C库,该库定义了许多数据类型,所有这些类型都需要由用户管理它们的生命周期。有许多函数以这种方式定义:int*create(){returnnewint();}voiddestroy(int*i){deletei;}其中大部分在创建后不需要访问。他们只需要存在。因此,我尝试使用在我需要它们存在的范围内声明的unique_ptr来管理它们。这样的声明是这样的://NotethatI'mavoidingwritingthetype'snamemanually.autoa=std::unique_ptr,decltype(&destroy)>{create(),&destro

c++ - 为什么这个悬空的 std::weak_ptr 不会导致 SEGFAULT?

这个问题在这里已经有了答案:Whendoesinvokingamemberfunctiononanullinstanceresultinundefinedbehavior?(2个答案)关闭4年前。在下面的代码中,我在范围内创建了一个shared_ptr并将其分配给一个weak_ptr。为什么在运行代码时我没有得到SEGFAULT,因为wp应该在范围之外无效,对吧?namespace{structDummy{intx;voidfoo(){std::coutwp;{autosp=std::make_shared();wp=sp;}wp.lock()->foo();};

c++ - 当通过 FFI 从 Rust 调用时,您如何使用返回 shared_ptr<T> 的 C++ 函数?

C++shared_ptrcreate_foo();使用rustextern"C"{pubfncreate_foo()->???;}Bindgen将shared_ptr变成不透明的blob。我不能只使用原始指针,因为这样C++代码就不知道我有一个对Foo的引用,并且可能会调用它的解构函数。 最佳答案 std::shared_ptr是一个C++类和一个非平凡的类型,不能按原样从库中导出——您需要它在目标语言中的定义符合C++中的定义.要使用FFI,您需要为您的库函数提供一个简单的CABI(C++ABI不稳定,可能会在编译器版本之间发生

c++ - 动态分配 std::unique_ptr 有什么用?

使用new创建一个std::unique_ptr是否有意义?在下面的代码片段中,我怀疑std::unique_ptr管理的SimpleClass对象不会被销毁,除非我删除std::unique_ptr我自己。我想不出它在什么情况下有用,所以我想知道是否存在实际使用它的情况。std::unique_ptr*ptr_to_unique_ptr=newstd::unique_ptr();ptr_to_unique_ptr->reset(newvector_test::SimpleClass(555));deleteptr_to_unique_ptr; 最佳答案

论文学习——基于音频、词汇和不流畅特征的门控多模态融合,用于从自发语音中识别阿尔茨海默病痴呆Multi-modal fusion with gating using audio, lexical an

文章目录引言正文AbstractIntroductionProposedApproach提出方法2.1MultimodalFeatures多模态特征2.2SequenceModeling序列特征2.3MultimodalFusionwithGating基于门控的多模态融合2.4Multi-modalModalwithDisfluencyMarkersExperiments实验3.1Data3.2ImplementationandMetrics3.3BaselineModel4ResultConclusion总结总结引言这篇文章是公开代码的少有的几篇论文之一,需要好好学习一下,一方面是为了了解代

c++ - 将 std::map<int, std::shared_ptr<Base>> 转换为 std::map<int, std::shared_ptr<Derived>> 的最有效安全方法

我们目前存储了几个不同的数据模型集合,如下所示:std::map>>models;字符串映射到一个已知的类型列表,这都是通过序列化处理的。嵌套映射包含“对象ID”和关联(反序列化)std::shared_ptr的集合DataObject是一个基类,我们从中派生出多种类型。我们有一个方法来获取给定类型的所有数据对象:staticstd::map>*getAll(std::stringtype);这只是在给定的“类型”键处返回指向map的指针。今天我遇到了一个代码审查来添加我认为调用UB但似乎起作用的以下内容。这让我有点紧张并寻找有效的解决方案:templatestaticstd::map

c++ - BOOST_FOREACH : What is the error on using this of a STL container?

有谁知道为什么以下会在VC9上产生错误?classElem;classElemVec:publicvector{public:voidfoo();};voidElemVec::foo(){BOOST_FOREACH(Elem&elem,*this){//Dosomethingwithelem}return;}我得到的错误是:errorC2355:'this':canonlybereferencedinsidenon-staticmemberfunctions我现在拥有的唯一(hack)解决方案是:voidElemVec::foo(){ElemVec*This=this;BOOST_FO

c++ - 是否可以在 gcc 3.3+ 中以旧方式使用 __func__? (C++)

对于3.3之前的gcc版本和MS编译器,我使用以下宏:DEBUG_WARNING(...)printf(">WARNING:"__FUNCTION__"()"__VA_ARGS__);使用:DEBUG_WARNING("someFunctionreturned%d",ret);输出:>WARNING:Class::FunctionName()someFunctionreturned-1当我们有很多系统时,它非常方便,所有系统都发送输出。它是一个单行宏,允许我们相应地过滤输出。小代码,大用途,快乐我。由于__FUNCTION__(和C++中的__func__)定义发生了变化(我相信是为了

c++ - 英特尔线程构建 block 并发队列 : Using pop() over pop_if_present()

与pop()相比,使用阻塞调用有什么区别,while(pop_if_present(...))哪个应该优先于另一个?为什么?我希望更深入地了解在while(pop_if_present(...))情况下轮询自己与让系统为您完成轮询之间的权衡。这是一个很普遍的主题。例如,使用boost::asio我可以执行myIO.run()来阻止或执行以下操作:while(1){myIO.poll()}一个可能的解释是调用while(pop_if_present(...))的线程将保持忙碌,所以这很糟糕。但是某人或某物必须轮询异步事件。当它委托(delegate)给操作系统或库时,为什么以及如何能更便

c++ - 为什么这些 shared_ptr 不指向同一个容器?

我有一个类模型:classModel{...boost::shared_ptr_deck;boost::shared_ptr_stack[22];};Deck继承自CardStack。我试图让_stack[0]指向与_deck指向相同的东西:{_deck=boost::shared_ptr(newDeck());_stack[0]=_deck;}似乎对_stack[0]的_deck的赋值导致生成了_deck的拷贝。(我知道这一点是因为对_stack[0]的修改不会导致对_deck的修改。)如何让它们指向同一事物?好的-没有调用复制构造函数。我已经通过实现它并查看它是否被调用来验证这一点