草庐IT

BUILD_SHARED_LIBRARY

全部标签

c++ - 为什么 std::tr1::shared_ptr<>.reset() 如此昂贵?

分析一些大量使用shared_ptrs的代码,我发现reset()的开销出奇地大。例如:structTest{inti;Test(){this->i=0;}Test(inti){this->i=i;}};...autot=make_shared(1);...t.reset(somePointerToATestObject);跟踪最后一行中的reset()(在VC++2010下),我发现它创建了一个新的引用计数对象。有没有更便宜的方法,重用现有的引用计数并且不打扰堆? 最佳答案 在一般情况下,您不能重用现有的引用计数,因为可能有其他s

c++ - 如何使用 Boost Graph Library 获取边缘的端口标识符?

使用BoostGraphLibrary,是否可以获取边缘的端口标识符?示例:调用read_graphviz后,我可以遍历该图的边并打印它们的node_id——我得到“A->B,A->乙”。如何打印类似“A:p0->B:p1,A:p0->B:p2”的内容?digraphG{A[label="A|p0"];B[label="B|p1|p2"];A:p0->B:p1;A:p0->B:p2;} 最佳答案 来自read_graphviz_new.hpp来源:structedge_info{node_and_portsource;node_an

c++ - 迪尔德 : Library not loaded (image not found) but it's there

尝试在另一台Mac上启动我的Qt应用程序(使用macdeployqt部署)时出现此错误。dyld:Librarynotloaded:kqoauth.framework/Versions/0/kqoauthReferencedfrom:/MyProject.app/Contents/MacOS/MyProjectReason:imagenotfoundTrace/BPTtrap我检查了.app-bundle并将kqoauth.framework复制到几个不同的位置(框架文件夹,可执行文件旁边,资源文件夹),但错误仍然存​​在。这是我的项目树:我也试过otool-L它,一切似乎都很好。(k

c++ - "STL"和 "C++ Standard Library"之间是否有清晰的分隔定义?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:What'sthisSTLvs.“C++StandardLibrary”fightallabout?我非常习惯STL(“标准模板库”)这个术语,当我真正指的是C++标准库时,我发现自己经常使用它。因此,由于如今C++(-11)标准库中的几乎所有内容都是模板,我想知道:在C++标准库中是否定义了什么是STL,什么不是?也许是容器、流、算法等?或者我应该停止使用术语“STL”,因为它是SGI(对吗?)多年前用于其lib的历史性术语?这将是困难的...

c++ - boost::python 函数调用中 boost::shared_ptr 的转换

考虑以下示例:#include"Python.h"#include#includeclassA{};classB:publicA{};voidfoo(boost::shared_ptr&aptr){}BOOST_PYTHON_MODULE(mypy){usingnamespaceboost::python;class_>("A",init());class_,bases>("B",init());def("foo",foo);}如果我调用python代码importmypyb=mypy.B()mypy.foo(b)我明白了ArgumentError:Pythonargumenttype

c++ - 在什么平台上 func(shared_ptr(...), shared_ptr(...)) 真的很危险?

我记得ScottMeyers教我的func(shared_ptr(newP),shared_ptr(newQ));是危险的,因为(如果我没记错的话)内存分配、引用计数(构造)和分配给顺序>函数参数允许leak(理论上?)在极少数情况下出现。为了防止这种情况应该将shared_ptr封装在函数调用中,例如在make_shared()中。func(make_shared(),make_shared());这是一些discussion关于它。我想知道是否有(当前)编译器在该领域,在某些系统上确实可能在某些错误情况下留下一些漏洞?还是那些时代已经过去了,或者它们只是理论上的?最有趣的是知道其中

c++ - c_include_path 与 ld_library_path

在Ubuntu12.04或Springdale6.4上,使用gcc和g++,C_INCLUDE_PATH(或CPLUS_INCLUDE_PATH)和LD_LIBRARY_PATH之间有什么区别?LD一个只在运行时使用,另外两个只在编译时使用吗?由于GCC在这些操作系统上似乎忽略了INCLUDE和LIBRARY_PATH环境变量,因此我应该在构建~/.bashrc文件时设置它尽可能跨现代Linux操作系统可移植(实际路径中的模数变化)? 最佳答案 LD_LIBRARY_PATH是一个环境变量,当您启动可执行文件时,它告诉dll加载程序

c++ - boost::shared_ptr 到 void * 反之亦然

我正在用C语言开发一个应用程序,我需要在其中使用第3方C++库。所以,我基本上是在C++库周围编写一个包装器,以便可以从我的纯C应用程序中调用它。库中的一些方法返回类型为boost::shared_ptr的指针,我需要将其转换为void*[forC]然后将其转换回boost::shared_ptr类型以重用它以进行进一步处理。我使用以下方式进行转换:作废*:void*func1(){//aftertheboost::shared_ptriscreatedreturnstatic_cast(SHARED_PTR.get())}来自void*:voidfunc2(void*VOID_PTR

c++ - boost::shared_ptr,ctor 中的一个原子递增,但 dtor 中的两个原子递减?

我正在单步执行boost::shared_ptr的源代码,并且在构造时引用计数器调用一次原子增量。但是,在销毁时我看到原子递减被调用了两次,连接到弱引用?但是,这怎么行呢?在构建时递增一次,在销毁时递减两次,一次在release()中,一次在weak_release()中? 最佳答案 shared_ptr必须维护两个引用计数。一个用于共享实例,一个用于可能通过weak_ptr引用。有了这个,weak_ptr能够增加shared_ptr中的弱引用计数并保持shared_ptr事件(即使在分配的对象被释放之后)以确定从weak_ptr到

c++ - Boost Graph Library : How to use depth_first_visit, ColorMap 问题

初始问题:BoostGraphLibrary:PreventDFSfromvisitingunconnectednodes我正在尝试使用boost::depth_first_visit,但不知道如何提供ColorMap属性。我在这里尝试了示例中给出的方法:http://www.boost.org/doc/libs/1_58_0/libs/graph/example/loops_dfs.cpp我的(相关)代码:///Definevertexproperties.structNodeProperty{unsignedid;///Id.unsignedkind;///Kind.unsigne