草庐IT

C_Func_using_Func_ptr

全部标签

c++ - 我是否正确理解了 Scott Meyers 的 std::weak_ptr 示例的要点?

EffectiveModernC++(第136页)使用以下示例来激发std::weak_ptr。缓存被定义为一个无序的映射,具有指向对象的弱指针作为值。每当此缓存的客户端请求一个对象(通过键)时,就会查找相应的弱指针并在其上调用lock()。如果生成的std::shared_ptr不是null,则返回它。否则,对象从外部数据库重新加载,进入缓存并返回std::shared_ptr。现在的问题是:人们可能认为可以在没有std::weak_ptr的情况下实现这一点,而是将强共享指针存储为缓存值。如果强指针的use_count()为1,则表示客户端的所有指针都已销毁。这个例子的重点是使用st

c++ - 当非限定名称查找涉及 using-directives 时 [basic.scope.hiding]p2 的解释

在c++中有两种隐藏的名字:1)普通名称隐藏:[basic.scope.hiding]p1(http://eel.is/c++draft/basic.scope.hiding#1):Anamecanbehiddenbyanexplicitdeclarationofthatsamenameinanesteddeclarativeregionorderivedclass([class.member.lookup]).2)隐藏在[basic.scope.hiding]p2(http://eel.is/c++draft/basic.scope.hiding#2)中的特殊名称类型:Aclassn

c++ - nVidia 推力 : device_ptr Const-Correctness

在我广泛使用nVidiaCUDA的项目中,我有时会使用Thrust来做它做得非常非常好的事情。Reduce是一种在该库中实现得特别好的算法,reduce的一个用途是通过将每个元素除以所有元素的总和来规范化非负元素的vector元素。templatevoidnormalise(Tconst*constd_input,constunsignedintsize,T*d_output){constthrust::device_ptrX=thrust::device_pointer_cast(const_cast(d_input));Tsum=thrust::reduce(X,X+size);t

c++ - 异常 : bad_weak_ptr while shared_from_this

当我这样做时出现异常:std::bad_weak_ptr->shared_from_this()templateclasspainter_record_t{.......private:std::shared_ptr_owner;}这里我想在构造函数中设置“问题”对象:templateclassstream_record_t:publicpainter_record_t{public:stream_record_t(std::shared_ptrowner):painter_record_t(owner){//...}}我有基类:classi_painter_t{public:virt

c++ - std::unique_ptr 使用带有少量参数的自定义删除器

我想知道是否可以使用多个参数(标准删除器签名)为std::unique_ptr指定自定义删除器。我知道std::shared_ptr存在std::bind的解决方法,这使得它成为可能但是std::unique_ptr存在一些技巧吗?对我来说似乎不是因为根据http://en.cppreference.com/w/cpp/memory/unique_ptr:Typerequirements-DeletermustbeFunctionObjectorlvaluereferencetoaFunctionObjectorlvaluereferencetofunction,callablewit

c++ - using 声明如何在没有 ADL 的情况下减少可用于查找的名称?

#include#includeclassX{};namespaceN{std::stringto_string(X){return"foo";}voidfoo(){//usingstd::to_string;//willbreakthebuildifuncommented...//usingN::to_string;//...unlessthisisuncommentedaswellstd::cout要么我偶然发现了我不掌握的众多C++奥秘之一,要么我在这里遗漏了一些明显的东西。usingstd::to_string如何明显地将非限定查找期间可用的名称集减少为仅可通过ADL访问的名称

c++ - unique_ptr refcount 的替代方案

在下面的代码示例中,只要B的任何对象存在,就应该在structB中存在一个structA的实例.示例按预期工作。#include#include#includestructA{A(){std::coutguard(mtx);if(!refCount){a.reset(newA);}++refCount;}~B(){std::coutguard(mtx);--refCount;if(!refCount){a.reset();}}staticstd::unique_ptra;staticstd::mutexmtx;staticintrefCount;};std::unique_ptrB::

c++ - 如何将 "using"关键字用于可变参数模板

我有一个可变参数模板类,它可以在构造函数中使用任意数量的变量,还有一个std::tuple/std::pair。等等。我想将此包装器用于具有不同返回类型的函数。例如:classf1{usingoutput=double;outputoperator(){do_smth};}classf2{usingoutput=std::tuple;outputoperator(){do_smth};}templateclassOutputType{std::tuplem_val;public:OutputType(std::tuple&&val):m_val(val){};OutputType(Ty

c++ - 使用 shared_ptr 时出现 SEGFAULT

我正在尝试使用shared_ptr在C++中实现LazyConcurrentList-basedSet。我的推理是unreachablenodes将被最后一个shared_ptr自动释放。根据我的理解,shared_ptr的引用计数的递增和递减操作是原子的。这意味着只有引用该节点的lastshared_ptr应该为该节点调用delete/free。我为多线程运行程序,但我的程序崩溃并出现错误doublefreecalled或只是SegmentationFault(SIGSEGV)。我不明白这怎么可能。下面给出了我的实现代码,方法名称表示它们的预期操作。#include#include#

c++ - using 声明和实例化中的默认模板参数

编辑:显然,GCC允许在没有参数列表的情况下实例化类模板(当参数为默认值时),这是不兼容的(Clang是兼容的)。我猜需要括号的原因(即使参数列表为空)是为了明确表示它是模板实例化,而不是实际类型。所以我将我最初的问题转向了类模板和函数模板案例之间的差异:为什么在第二个片段中,允许调用不带括号的a,与第一个片段中A的实例化形成对比?为什么b不允许这样做?原文:一个只有默认参数的类模板可以在没有任何参数列表的情况下被实例化(见下面的A)。但是,如果通过using声明将该类模板的别名定义为具有相同默认参数的模板(请参阅下面的B),则其实例化需要一个参数列表(可能为空)。同样,将类模板的别名