草庐IT

weak_ptr_cast

全部标签

c++ - boost::lexical_cast 对于 c++11 stoi、stof 和 family 是否是多余的?

既然C++11引入了stoi,stof,boost::lexical_cast是多余的吗?和家人,还是有任何理由仍然使用它?(除了没有C++11编译器)它们提供完全相同的功能吗? 最佳答案 boost::lexical_cast句柄morekindsofconversion,包括迭代器对、数组、C字符串等。提供相同的通用接口(interface)(sto*对不同的类型有不同的名称)是区域敏感的(sto*/to_string只是部分,例如lexical_cast可以处理数千个分隔符,而stoul通常不会)

C++ - 返回 const unique_ptr

我想知道为什么编译时会出错:conststd::unique_ptrget(){returnstd::make_unique(10);}intmain(){conststd::unique_ptrvalue=get();returnEXIT_SUCCESS;}我收到以下错误:main.cpp:Infunction‘intmain()’:main.cpp:10:44:error:useofdeletedfunction‘std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=int;_Dp=std::default_delet

c++ - 带有 boost shared_ptr 的自定义(池)分配器

我想从一个池中分配由shared_ptr管理的对象,比如Boost的Pool接口(interface),如何实现? 最佳答案 这是执行您想要的操作的代码(可能无法编译,因为我手头没有boost并且我正在从内存中编写它):classYourClass;//yourdatatype,definedsomewhereelseboost::object_poolallocator;voiddestroy(YourClass*pointer){allocator.destroy(pointer);}boost::shared_ptrcreat

c++ - 为什么 libc++ 的 shared_ptr 实现使用完整的内存屏障而不是放松的?

在shared_ptr的boost实现中,它使用了relaxedmemoryorderingtoincrementitsreferencecount.这看起来很安全,因为减量使用获取/释放来确保在释放内存之前线程可以看到任何先前的减量。这个方法似乎是正确的,出现在HerbSutterstalkonatomics在libc++的实现中使用fullmemorybarrierstemplateinlineTincrement(T&t)_NOEXCEPT{return__sync_add_and_fetch(&t,1);}templateinlineTdecrement(T&t)_NOEXCE

c++ - 如何使用 const_cast?

我的Student类中有一个私有(private)变量,定义为:constintstudentNumnber;我正在尝试为Student编写一个复制构造函数,并且我需要抛弃constness来执行此操作。不幸的是,我不明白如何使用std::const_cast。这就是我在复制构造函数中尝试做的事情:Student(constStudent&s):Person(p.getName(),p.getEmailAddress(),p.getBirthDate()),school(0),studentNumber(0){school=newchar[strlen(s.school)+1];str

c++ - 在 c++14 lambda 表达式中捕获和移动 unique_ptr

我以这种方式在lambda表达式中捕获unique_ptr:autostr=make_unique("mystring");autolambda=[capturedStr=std::move(str)]{cout在我尝试将capturedStr移动到另一个unique_ptr之前,它工作得很好。例如,以下内容不起作用:autostr=make_unique("mystring");autolambda=[capturedStr=std::move(str)]{cout这是编译器的输出:.../test/main.cpp:11:14:error:calltoimplicitly-dele

c++ - 从 shared_ptr 中分离一个指针?

这个问题在这里已经有了答案:关闭10年前.PossibleDuplicate:Howtoreleasepointerfromboost::shared_ptr?我的接口(interface)的一个函数返回一个指向对象的指针。用户应该拥有该对象的所有权。我不想返回Boost.shared_ptr,因为我不想强制客户使用boost。但是,在内部,我想将指针存储在shared_ptr中,以防止出现异常等情况下的内存泄漏。似乎没有办法将指针与共享指针分离。这里有什么想法吗? 最佳答案 您正在寻找的是release函数;shared_ptr没

c++ - 标准::原子 | compare_exchange_weak 与 compare_exchange_strong

我不确定是我不理解还是文档没有明确表述。以下摘自最新草案(N3126,第29.6节):boolatomic_compare_exchange_weak(volatileA*object,C*expected,Cdesired);boolatomic_compare_exchange_weak(A*object,C*expected,Cdesired);boolatomic_compare_exchange_strong(volatileA*object,C*expected,Cdesired);boolatomic_compare_exchange_strong(A*object,C*

c++ - static_cast<T>(-1) 是在没有 numeric_limits 的情况下生成全一位数据的正确方法吗?

我在一个无法访问C++标准库的环境中编写C++代码,特别是无法访问std::numeric_limits.假设我要实现templateconstexprTall_ones(/*...*/)专注于无符号整数类型,我该放什么?具体来说,是static_cast(-1)够好了?(根据我猜的大小,我可以将其他类型视为无符号字符数组。) 最佳答案 使用bitwiseNOT接线员~在0.TallOnes=~(T)0;一个static_cast(-1)假定二进制补码,这是不可移植的。如果您只关心无符号类型,hvd'sanswer是要走的路。工作示

c++ - 为什么不推荐使用 std::shared_ptr::unique() ?

std::shared_ptr::unique()的技术问题是什么导致它在C++17中被弃用?根据cppreference.com,std::shared_ptr::unique()在C++17中被弃用为thisfunctionisdeprecatedasofC++17becauseuse_countisonlyanapproximationinmulti-threadedenvironment.我理解这对于use_count()>1是正确的:当我持有对它的引用时,其他人可能同时放开他的引用或创建一个新拷贝。但如果use_count()返回1(这是我在调用unique()时感兴趣的内容