草庐IT

c++ - boost shared_ptr的底层设计

我想了解boostshared_ptr类的底层设计。我想将它“移植”到fortran(不要问)。我理解的一件事是引用计数由shared_count类持有。这提示了我一个问题。很久没用过C++了,也没用过boost。假设我分配了一个类X的实例,然后将它传递给两个不同的shared_ptr实例。据我了解,每个shared_ptr实例对另一个实例一无所知,因此两个shared_ptr实例都引用同一个X实例,同时保持引用计数为1。如果一个shared_ptr超出范围而另一个不超出范围,则X对象将被删除(因为引用计数降为零)并且剩余的shared_ptr将有一个悬空指针。为了保持shared_p

c++ - boost::atomic 的 header 是什么

我想使用boost::atomic但要包含什么header?没有boost/atomic.hpp 最佳答案 Boost.Atomic目前还不是boost的官方部分。如果您仍想使用它,则需要从here获取它。.或者你可以试试Boost.Interprocess对于原子操作,依赖编译器相关扩展,如gccs原子操作(__sync_val_compare_and_swap等),或者,如果c++11是一个选项,请使用std::atomic,这几乎与boost::atomic相同IIRC.编辑:一如既往,这些事情发生了变化:Boost.Atom

c++ - Boost bind 和 boost function,将带有参数的函数存储在一个 vector 中,然后执行它们

抱歉标题措辞不当。我一直在查看文档,但找不到任何可以解决我所遇到的问题的方法。基本上我想存储几个function1,在vector中提供参数,然后在稍后阶段执行它们。这就是我想要完成的:typedefboost::function1Task;VectormScheduledTasks;intMyArg=5;voidSomeTask(void*arg){//....}voidAddSomeTasks(){//nevermindthatMyArgisgloballyaccessiblefor(inti=0;i现在执行task()它要我传递一个参数,但我在AddSomeTasks中传递了它?

c++ - 为什么在这种情况下 c++ 模板参数推导失败?

我正在尝试编写自己的委托(delegate)系统来替代boost::functions,因为后者做了很多我认为有问题的堆分配。我已经写了这个作为替换(简化,实际使用池内存和新位置,但这很简单,可以重现错误):templatestructDelegateFunctor:publicMyFunctor{DelegateFunctor(void(*fptr)(A,B),Aarg1,Barg2):fp(fptr),a1(arg1),a2(arg2){}virtualvoidoperator()(){fp(a1,a2);}void(*fp)(A,B);//Storesthefunctionpoi

c++ - boost::regex 和 std::regex 之间的不一致

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Nomatcheswithc++11regex我之前使用boost::regex来处理一些东西,而对于一些我想使用std::regex的新东西,直到我注意到以下不一致-所以问题哪个是正确的?#include#include#include#includevoidtest(std::stringprefix,std::stringstr){std::stringpat=prefix+"\\.\\*.*?";std::cout对我来说(gcc4.7.2,-std=c++11,boost:1.51),我看到了以下内

c++ - Boost套接字 - 客户端没有从服务器接收所有字节

我正在使用C++开发应用程序,但在使用boost套接字时遇到了一些困难。服务器发送图像,但并非所有字节都被客户端接收;客户端总是收到比服务器发送的少大约500个字节。下面提供程序运行的相关代码和截图。服务器代码:intsent=boost::asio::write(*socket,response,boost::asio::transfer_all(),error);std::cout客户端代码(我知道如果服务器发送的总字节数能被10000整除,read_some会阻塞;此代码仅用于测试):intlen=0;intcount=0;do{len=socket->read_some(boo

c++ - Boost mpl 转换序列 "real"类型

请参阅boostmpl转换文档中的以下代码:typedefvectortypes;typedefvectorpointers;typedeftransform>::typeresult;BOOST_STATIC_ASSERT((equal::value));我想了解boost::mpl的类型系统以及“它实际上是如何工作的”。据我了解,mpl::equal只是比较以下两个序列的元素,而不是整个序列类型本身。我不明白为什么以下失败:BOOST_STATIC_ASSERT((std::is_same::value));//为什么结果类型与“指针”类型不是100%相同?我认为这是某种原因,因为

c++ - 如何使用 boost::spirit 验证代数语句?

我正在尝试扩展calculatorexample因此,解析器将确定代数语句是否为真,而不是解析和评估代数表达式。我的意思是这样的语句1+5*5-10=19-3(期望的解析器结果是true)和3-1=9(所需的解析器结果为false)。我必须承认我是boost::spirit的新手,目前我有点不知所措。但是,我确实觉得我对计算器示例的理解足够好,至少可以取得一些进展。使用提供的示例作为起点,语法如下所示:calculator():calculator::base_type(expression){usingqi::uint_;usingqi::_val;usingqi::_1;expre

c++ - 将可变大小数组传递给 DLL 的选项有哪些?

我想知道如果我想将大小在运行时确定的数组传递给DLL函数,我有哪些选项。目前我在DLL中的函数签名看起来像#ifdefBUILDING_DLL#defineDBUILDING__declspec(dllexport)#else#defineDBUILDING__declspec(dllimport)#endifvoid__cdeclDBUILDINGmyFunc(constdoublet,constdoublex[],double*xdot);所以我传递的是在某个类中动态分配的普通旧数据类型,然后必须手动删除这些数据类型。我宁愿不必调用delete也不必担心内存管理,所以我想看看其他选

c++ - 在 C++ Builder 中编译 Boost 库时的警告

当我尝试包含时收到警告在C++生成器中。对于我包含的每个单元,C++Builder都会显示这两行:thread_heap_alloc.hpp(59):W8128Can'timportafunctionbeingdefinedthread_heap_alloc.hpp(69):W8128Can'timportafunctionbeingdefined已经尝试了一些东西,但没有任何效果。它编译正确,但是,它让我很紧张。为什么显示此消息?行是:#includenamespaceboost{namespacedetail{inlineBOOST_THREAD_DECLvoid*allocate