草庐IT

auto_array_ptr

全部标签

c++ - 发布 boost::ptr_vector,不匹配文档

我正在使用boost1.37,我正在尝试使用boost::ptr_vector,并转移它的所有权,以便我可以从函数中返回它。查看boost文档(http://www.boost.org/doc/libs/1_36_0/libs/ptr_container/doc/tutorial.html#new-functions)std::auto_ptr>get_zoo(){boost::ptr_dequeresult;...returnresult.release();//giveupownership}...boost::ptr_dequeanimals=get_zoo();我试过:#inc

c++ - 在 boost::python 中公开 boost::scoped_ptr

我收到一个编译错误,说scoped_ptr的复制构造函数是私有(private)的,代码片段如下:classa{};structs{boost::scoped_ptrp;};BOOST_PYTHON_MODULE(module){class_("s");}虽然这个例子适用于shared_ptr。如果有人知道答案,那就太好了。谢谢 最佳答案 boost::scoped_ptr的语义禁止复制,而shared_ptr旨在被复制。您得到的错误是编译器告诉您某些代码(宏扩展?)正在尝试复制scoped_ptr但库不允许进行复制。

c++ - auto_ptr 和 dynamic_pointer_cast

如果我想将dynamic_cast与shared_ptr一起使用,我可以使用dynamic_pointer_cast。如果我想转换auto_ptr,我该用什么?我假设如下所示。structB:A{};...auto_ptrbase(...);auto_ptrderive=dynamic_pointer_cast(base);我正在为shared_ptr使用boost 最佳答案 auto_ptrbase(...);if(B*query=dynamic_cast(base.get())){//takeownershipbase.rele

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上发生数据竞争,那么是的。正如你所说。但是,正如您可能知

.net - 如何将 cli::array 从 native 代码转换为 native 数组?

我正在围绕用C++\CLI编写的托管组件编写native包装器。我在托管代码中有以下功能:array^Class::Function();我想从具有以下签名的nativeC++类公开此函数:shared_arrayClass::Function();我已经知道如何从native代码调用托管函数,但我不确定如何安全地将托管数组复制到非托管数组中。gcroot^>managedArray=_managedObject->Function(); 最佳答案 有两种常用的方法:使用native代码执行编码(marshal)处理,这需要使用pi

c++ - R 数值 vector 列表 -> C++ 2d array with Rcpp

我主要使用R,但最终想使用Rcpp与一些接收和返回二维数值数组的C++函数交互。因此,为了开始使用C++和Rcpp,我想我只需要编写一个小函数,将我的可变长度数字vector的R列表转换为C++等效项,然后再返回。require(inline)require(Rcpp)test1=cxxfunction(signature(x='List'),body='usingnamespacestd;Listxlist(x);intxlen=xlist.size();vector>xx;for(inti=0;itest=as>(xlist[i]);xx.push_back(test);}retu

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 std unique_ptr 的 STL 集合的序列化

我希望能够序列化std::unique_ptr的STL容器。可以吗?顺便说一句,单个std::unique_ptr一切正常。下面是我正在处理的代码,gcc给出了以下错误:useofdeletedfunction‘std::unique_ptr::unique_ptr(conststd::unique_ptr&)[with_Tp=MyDegrees;_Dp=std::default_delete;std::unique_ptr=std::unique_ptr]’如何使代码正常工作?#include#include#include#include#include#include#inclu

c++ - 如果我使用 Array 而不是 Vector,有什么缺点吗?

我用C++编写了一个MPCController,其中包含一个Matrix类,我将数据存储在一个数组中,并使用了C内存函数(memcpy、memset等)。今天我用c++vector替换了数组,我使用复制来移动内存等......我遇到了一个问题,通过用vector替换数组,控制信号的计算时间几乎增加了一倍。如果我使用alloc、memcpy、memset、freeinsc++代码,有什么缺点吗?如果有的话是什么? 最佳答案 Vector在两个方面增加值(value):提供C数组中不存在的附加功能,例如调整大小、检查当前大小等。您可能会