草庐IT

shared-directory

全部标签

c++ - `shared_ptr` 是如何实现协变的?

可以复制或构建shared_ptr来自shared_ptr(即shared_ptrptr=make_shared())。但众所周知,模板类不能相互转换,即使模板参数可以。那么如何才能shared_ptr检查它们的指针的值是否可转换,如果是则进行转换? 最佳答案 是的,默认情况下同一类模板的特化几乎没有关系,基本上被视为不相关的类型。但是您始终可以通过定义转换构造函数(To::To(constFrom&))和/或转换函数(From::operatorTo()const)来定义类类型之间的隐式转换。那又如何std::shared_ptr

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::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++ directory_iterator

自从我使用C++以来已经有一段时间了,请原谅我的新手问题。我编写了以下代码来获取目录内容的列表,它运行良好:for(directory_iteratorend,dir("./");dir!=end;dir++){std::cout“*dir”返回什么,一个“字符数组”指针,一个指向“字符串”对象的指针,还是一个指向“路径”对象的指针?我想将“*dir”(如果它以.cpp结尾)传递给另一个function(),它将在稍后(异步)对其进行操作。我想我需要复制“*dir”。我写了下面的代码:path*_path;for(directory_iteratorend,dir("./");dir!

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关于它。我想知道是否有(当前)编译器在该领域,在某些系统上确实可能在某些错误情况下留下一些漏洞?还是那些时代已经过去了,或者它们只是理论上的?最有趣的是知道其中

如何使用ADAL从Azure Active Directory获取用户角色

我正在研究使用的Android应用程序阿达尔库对用户进行身份验证,现在需要根据其AD角色为特定的一组用户显示某些操作。如何访问广告用户角色?Android应用与ASP.NETWebAPI服务进行交互看答案如果您的角色是指小组成员资格,则至少有两种方式:将groupMembershipclaims设置为“SecurityGroup”或您应用中的“ALL”AAD中的“ALL”这使您可以在ID令牌中收到用户的组成员资格(这为您提供了用户的名称等)返回的只是组的ID,而不是名称返回的最大200组ID的限制您可以找到一些信息这里,尽管它适用于旧门户(在新门户中更容易清单管理)或者,您可以从Microso

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++ - CMake 在 include_directories 中找不到正确的头文件/包含文件

当我尝试编译时,我再次收到“undefinedsymbolsforarchitecturex86_64”错误。我已经尝试了比我在这篇文章中实际记录的更多的东西(因为我已经忘记了我尝试过的所有内容)。这是一个非常简单的设置,应该使用CMake很容易编译...当我对此运行make时,它​​工作得很好。但我想将其转换为CMake以实现互操作性。如您所见,我在几个地方放置了“${HEADERS}”变量,我已经尝试了很多位置,但我一直收到错误。根据我放置${HEADER}的位置,它在技术上还可以生成“错误:生成多个输出文件时无法指定-o”的错误(如果它仅位于target_link_library

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++ - 为什么 std::future<T> 和 std::shared_future<T> 不提供成员 swap()?

C++标准库中的各种类都有成员交换函数,包括一些多态类,如std::basic_ios。.模板类std::shared_future显然是一个值类型并且std::future是一个只能移动的值类型。有什么特别的原因,他们不提供swap()成员函数? 最佳答案 在std::move之前,成员交换是一个巨大的性能提升C++11中的支持。例如,您可以通过这种方式将一个vector移动到另一个位置。它用于vector也会调整大小,这意味着插入vector的vector并不是完全的性能自杀。在std::move之后到达C++11,许多有时为空