草庐IT

atomic_shared_ptr

全部标签

c++ - 使用包含 std::unique_ptr 的结构的 std::vector 声明类时出错

虽然我已经使用C#工作了几年,但用C++完成工作有时对我来说仍然很困难。我完全接受智能指针的使用,但现在我面临以下难题我有一个结构Foo,例如structFoo{Foo(std::unique_ptrbar):m_myBar(std::move(bar)){}private:std::unique_ptrm_myBar;};在另一个类中,我想要一个包含Foo实例的vector,但是下面这行std::vectorm_Foos;产生编译错误,指出拷贝构造函数被删除。在SO线程“WhycanInotpush_backaunique_ptrintoavector?”中给出了解释和补救措施。但是

c++ - 赋值是否等同于 std::atomic<bool> 的加载/存储

我看到这可能在问题MustIcallatomicload/storeexplicitly?中得到了回答.因此,为了清楚起见,我将简明扼要地重申我的问题,希望future的读者能明白这一点。是std::atomicb(false);boolx=b;与相同std::atomicb(false);boolx=b.load();和std::atomicb(false);b=true;与相同std::atomicb(false);b.store(true);如果确实如此,那么:为什么有两个选项?明显的好处是什么?在处理原子时,更喜欢更冗长的load()/store()而不是可能令人困惑的赋值(=

c++ - 为什么在所有情况下都允许指向 shared_ptr 构造的原始指针?

我正在阅读Top10dumbmistakestoavoidwithC++11smartpointer.第5条内容如下:Mistake#5:Notassigninganobject(rawpointer)toashared_ptrassoonasitiscreated!intmain(){Aircraft*myAircraft=newAircraft("F-16");shared_ptrpAircraft(myAircraft);...shared_ptrp2(myAircraft);//willdoadoubledeleteandpossiblycrash}建议是这样的:Usemake

c++ - unique_ptr 和 OpenSSL 的 STACK_OF(X509)*

我使用一些using语句和unique_ptr来与OpenSSL一起工作,如suggestedinanotherquestion.否则,代码会变得非常丑陋,而且我不太喜欢goto语句。到目前为止,我已经尽可能地更改了我的代码。以下是我使用的示例:usingBIO_ptr=std::unique_ptr;usingX509_ptr=std::unique_ptr;usingEVP_PKEY_ptr=std::unique_ptr;usingPKCS7_ptr=std::unique_ptr;...BIO_ptrtbio(BIO_new_file(some_filename,"r"),::

c++ - 从 shared_ptr 到 weak_ptr 多态性的转换

我很难解决这个问题。假设我有这个vectorstd::vector>cars;Car是一个抽象类。我希望能够返回不同类型的弱指针,所以我执行以下操作。templatestd::weak_ptrGetCar(){for(std::vector>::iteratorit=cars.begin();it!=cars.end();++it){T*derived=dynamic_cast((*it).get());if(derived!=nullptr){std::weak_ptrcarPointer=*it;returncarPointer;}}returnstd::weak_ptr();}但

c++ - shared_from_this 和私有(private)继承

cppreference有这个如何使用std::enable_shared_from_this的例子(略微调整)classGood:std::enable_shared_from_this{public:std::shared_ptrgetptr(){returnshared_from_this();}};...autogood=std::make_shared();good->getptr();但是,这在VisualStudio2015(企业版,版本14.0.25123.00更新2)中不起作用,即std::bad_weak_ptr抛出异常。查看其他示例(包括来自cppreferenc

c++ - 为什么 std::atomic_thread_fence 有 "C"链接?

我猜不出为什么这个函数需要“C”而不是“C++”链接。 最佳答案 由LWGissue1479添加这是针对C++11的最后一分钟评论。此更改的基本原理是C语言兼容性(C11线程库在stdatomic.h中具有同名函数atomic_thread_fence)。据我所知,C和C++原子库可以共存一直是一个计划:其他兼容性示例是std::atomic的C兼容类型别名,例如atomic_int和C兼容性宏ATOMIC_VAR_INIT 关于c++-为什么std::atomic_thread_fen

c++ - 将 std::unique_ptr 传递给构造函数以获取所有权

我想将std::unique_ptr传递给一个类的构造函数,该类将获得std::unique_ptr所拥有的数据的所有权。下面的方法foo和bar在编译器处理它们的方式方面是否有任何差异,从而使其中之一更可取?foo类:templateclassfoo{std::unique_ptrdata_;public:foo(std::unique_ptr&&data):data_{std::forward>(data)}{}};bar类:templateclassbar{std::unique_ptrdata_;public:bar(std::unique_ptrdata):data_{std

c++ - 混合 boost::optional 和 std::unique_ptr

我承认:我爱上了可选的概念。自从我发现它以来,我的代码质量有了很大的提高。明确变量是否有效比简单的错误代码和带内信号要好得多。它还让我不必担心必须阅读文档中的契约(Contract),或者担心它是否是最新的:代码本身就是契约(Contract)。就是说,有时我需要处理std::unique_ptr。这种类型的对象可能为空,也可能不是;在代码中的给定点不可能知道std::unique_ptr是否应该有值;不可能从代码中知道契约。我想以某种方式混合optional(可能与boost::optional)和std::unique_ptr,这样我就有一个动态分配的对象,具有范围破坏和适当的复制

c++ - gcc -fPIC 与 -shared

在使用gcc/g++编译共享库时,为什么-shared选项没有隐含-fPIC?或者,换句话说,链接时是否需要选项-fPIC?简而言之,我应该写:gcc -c -fPIC foo.c -o foo.ogcc -shared -fPIC foo.o -o libfoo.so//with-fPIC或者以下是否足够:gcc -c -fPIC foo.c -o foo.ogcc -shared foo.o -o libfoo.so//without-fPIC 最佳答案 内置到共享库中的代码通常(但不是必须)是与位置无关的代码,以便共享库可以很