草庐IT

shared-libraries

全部标签

c++ - std::make_shared 作为默认参数不编译

在VisualC++(2008和2010)中,以下代码无法编译并出现以下错误:#includevoidFoo(std::shared_ptrtest=::std::make_shared(5)){}classP{voidFoo(std::shared_ptrtest=::std::make_shared(5)){}};errorC2039:'make_shared':不是'`globalnamespace''的成员errorC3861:'make_shared':找不到标识符它提示P::Foo()而不是::Foo()的定义。有谁知道为什么Foo()有一个默认参数与std::make_s

c++ - 按值返回由互斥量保护的 shared_ptr 是否安全?

这是一个代码示例:classA{boost::mutexa_mutex;boost::shared_ptra;boost::shared_ptrclone_a(void){boost::lock_guardlock(a_mutex);returna;}};建议boost::shared_ptr对A::a的复制构造函数调用将在boost::lock_guard析构函数调用之前尽管有编译器优化。那么,调用A::clone_a()安全吗? 最佳答案 如果您所说的“安全”是指您不会在a上发生数据竞争,那么是的。正如你所说。但是,正如您可能知

c++ - C/C++ 警告 : address of temporary with BDADDR_ANY Bluetooth library

我在使用g++和在Ubuntu下使用蓝牙库的C/C++程序的编译过程时遇到了一些问题。如果我使用gcc,它可以正常工作,没有任何警告;相反,如果我使用g++,我会收到此警告:warning:takingaddressoftemporary即使程序编译正常并且可以运行。报错涉及的线路有:bdaddr_t*inquiry(){//dosomestuff..bacpy(&result[mote++],BDADDR_ANY);returnresult;}//...voidzeemote(){while(bacmp(bdaddr,BDADDR_ANY)){/..}}在这两种情况下,都涉及BDAD

c++ - 我如何在 void* 和 boost shared_ptr 之间进行转换

我有这些行:typedefboost::shared_ptrA_SPtr;void*f(void*var){...我希望能够做这样的事情:A_SPtrinstance=(void*)(var);我该怎么做?另外,我怎样才能将意义从shared_ptr转换为void*? 最佳答案 只需将指针转换为指向和来自void*的共享指针。shared_ptr到void*:f(reinterpret_cast;(&A_SPtr));void*回到shared_ptr:A_SPtrinstance=*reinterpret_cast(boost::

c++ - 如何使用移动构造函数正确处理 shared_ptr 的映射?

假设我有一个容器std::map>我想用外部函数填充它并避免处理它的内容。所以我有typedefContainerstd::map>Container&&f(){Containerbar;autofoo=std::shared_ptr(newMyClass());bar.insert(std::make_pair(0,foo));std::coutprint_smthprint_smth如果我使用传统的复制构造函数,一切都会按预期工作。 最佳答案 这远太复杂了。为什么不直接说:intmain(){Containerbaz{{0,st

c++ - 带有 boost 的 CMake(在 Windows 上):Could not find libraries?

我正在尝试使用CMake构建我的项目。我也在使用boost。我的CMakeLists.txt文件中的查找包语句是:find_package(Boost1.42所需组件python系统文件系统序列化线程程序选项正则表达式test_exec_monitor)构建失败,我收到的错误消息是:找不到以下Boost库:boost_systemboost_filesystemboost_serializationboost_threadboost_program_options当我检查我的lib目录时,我发现这些库的名称是:libboost-vc100-mt.lib而不是boost_事实上,当我根据

c++ - 错误 : no instance of overloaded function "std::make_shared" matches the argument list

查看ApreviousstackQuestionstd:make_sharedvsstd::shared_ptr,我试图在一个uni项目中实现它。这是之前的“问题”:Ican'tthinkofanysituationwherestd::shared_ptrobj(newObject("foo",1));wouldbepreferredtoautoobj=std::make_shared("foo",1);因此我采用了这段代码:std::shared_ptrpT1(newTriangle(pCanvas,30,30,30,60,60,30,255,0,0));并将其修改为这段代码:aut

c++ - shared_ptrs 的 vector 行为神秘

我创建了一个Base类shared_ptr的vector来保存Derived类shared_ptr,并运行到一些问题。下面的简化示例显示了发生的情况。#include#include#includeusingnamespacestd;classBase{public:Base(inti):val(i){}intval;};classDerived:publicBase{public:Derived(inti):Base(i){}};intmain(){vector>vec1{make_shared(5),make_shared(99),make_shared(18)};for(auto

c++ - 为什么 std::shared_ptr 的别名构造函数不初始化 std::enabled_shared_from_this?

考虑以下代码:structFoo:std::enable_shared_from_this{};structBar{Foofoo;};intmain(){std::shared_ptrbar_p(newBar);//makeshared_ptrtomemberwithaliasingconstructorstd::shared_ptrfoo_p(bar_p,&bar_p->foo);assert(bar_p->foo.shared_from_this());//fail!throwsbad_weak_ptr}不幸的是,它没有按预期工作(至少在GCC4.8.2中)。我查看了代码,似乎别名

c++ - 对象 std::shared_ptr 是否可以通过它的 std::weak_ptr 找到?

所以我有一个std::vector>myListOfT;我有一个std::weak_ptrptrToOneT;它是从用于填充该容器的指针之一创建的(假设我将它放在回调函数中)。威尔std::find在那个容器和我的weak_ptr给我一个原始shared_ptr的迭代器(如果集合中存在这样的一个)?它是在标准的某处得到保证还是依赖于此实现? 最佳答案 通过使用std::weak_ptr::owner_before,我们可以不锁定weak_ptr。我将使用比必要的稍微冗长的解决方案并引入owner_equal,它与std::owner