草庐IT

unique_future

全部标签

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++ - boost::ptr_vector 对比 std::vector<std::unique_ptr<T>>?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。他们做类似的事情。在两者之间进行选择时应该考虑什么?在哪种情况下,哪一个是首选?

c++ - 拥有一个具有原始指针访问器的 unique_ptr 成员是不好的做法吗?

我有一个类有一个unique_ptr成员,并且这个类保留这个对象的唯一所有权。但是,外部类可能需要访问此对象。在这种情况下,我应该只返回一个原始指针吗?shared_ptr似乎不正确,因为这意味着访问类现在共享该内存的所有权,而我想明确指出原始类是唯一所有者。例如,也许我有一个拥有根节点的树类。另一个类可能出于某种原因希望探索树,并且需要指向根节点的指针来执行此操作。部分实现可能如下所示:classTree{public:Node*GetRoot(){returnm_root.Get();}private:std::unique_ptrm_root;};这是不好的做法吗?更好的解决方案

c++ - 尽管使用静态 unique_ptr 进行析构函数调用,但内存泄漏

我使用unique_ptr作为静态数据成员来保存指针。structTest{inti;~Test(){coutte;};unique_ptrS::te=unique_ptr(newTest());在程序终止时S::te被析构,调用测试析构函数。但是_CrtDumpMemoryLeaks向我显示了S::te.get()的内存位置上的内存泄漏,这是指向(已破坏的)测试对象的指针。我不明白这种行为。我不能使用静态unique_ptr吗?为什么在unique_ptr实现中调用了析构函数会出现泄漏? 最佳答案 如果您试图在静态破坏发生之前检查

C++ 无法使用通用引用 move unique_ptr

考虑这段代码:templateTmov(T&&t){returnstd::move(t);}intmain(){std::unique_ptra=std::unique_ptr(newint());std::unique_ptrb=mov(a);}mov函数应该简单地接受一个通用引用并按值返回它,但是通过move而不是复制它。因此,调用此方法时不应涉及复制。因此,使用只能move的unique_ptr调用这样的函数应该没问题。但是,此代码无法编译:我收到错误:test.cpp:24:34:error:useofdeletedfunction‘std::unique_ptr::uniqu

c++ - 将 unique_ptr 的 vector 传递给函数,const 引用

我通常会像这样传递一个包含原始指针的vector:someFunc(conststd::vector&classList){..}我想知道你是否可以像这样对unique_ptr做同样的事情:someFunc(conststd::vector>&classList){..}?它的意思是一样的吗?即只读。 最佳答案 是的,你可以。不,这不是同一件事:std::unique_ptr表示指针拥有的资源。通用原始指针可以具有许多其他语义。关于const的正确性,使用迭代器或operator[]访问vector的元素将产生对std::uniqu

c++ - 传递返回多态 unique_ptr 的 lambda 作为函数指针

我想传递一个非捕获的lambda,它返回一个std::unique_ptr,作为std::unique_ptr(*)()类型的函数指针.但是,这仅在我将lambda的返回类型明确声明为std::unique_ptr时才有效。.为什么要明确说明返回类型?为什么它适用于std::function没有这个额外的返回类型?#include#includestructBase{virtual~Base()=default;};structDerived:Base{};structFailsForF2{usingFunction=std::add_pointer_t()>;FailsForF2(F

c++ - 在带有 std::unique_ptr 的 lambda 中使用 std::bind

//Byconstl-valuereferenceautofunc2=std::bind([](conststd::unique_ptr>&pw)//fine{std::coutsize()>(22,1));//Bynon-constl-valuereferenceautofunc3=std::bind([](std::unique_ptr>&pw)//fine{std::coutsize()>(22,1));//ByValueautofunc4=std::bind([](std::unique_ptr>pw)//error{std::coutsize()>(22,1));func4(

c++ - 如何为 std::unique_ptr 创建一个有效的 C++ 别名模板

我想为std::unique_ptr创建一个别名模板来提供我自己的删除函数。unique_ptr有一个标量和一个数组实现,它们是这样定义的:template>classunique_ptr//scalartemplateclassunique_ptr//array我在尝试覆盖unique_ptr的标量和数组版本时遇到了麻烦。只为一个版本创建别名很容易,如下所示:templatestructDeleter{voidoperator()(T*ptr){deleteptr;}};templateusingmy_unique_ptr=std::unique_ptr>;但是当我尝试添加第二个别名

c++ - 多态 unique_ptr 复制省略

我有以下代码适用于Clang5.0,但不适用于启用了C++14的Clang3.8:classBase{};classDerived:publicBase{};std::unique_ptrMakeDerived(){autoderived=std::make_unique();returnderived;}intmain(){autobase=MakeDerived();std::coutLiveSampleHere在这种情况下,由于复制省略,返回值在技术上是移动构建的吗?如果是这样,这是否意味着unique_ptr的移动构造函数旨在支持用户类类型的隐式向上转换?从cppreferen