草庐IT

auto_ptr

全部标签

c++ - 在简单的情况下使用 scoped_ptr 是否有点矫枉过正?

我在像这样的小函数中使用scoped_ptr。这样我就不必调用delete了。这是这种用法的矫枉过正吗?我的团队成员更喜欢原始指针和删除。如果这恰好用在非常关键的路径中,那么使用scoped_ptr的成本是多少?这不应该是内联的并且完全等同于在优化的二进制文件中使用普通删除吗?voidmyfunc(){boost::scoped_ptrobjptr=someFactory::allocate();callsomeotherfunc(objptr.get());} 最佳答案 我不确定对性能的影响,但是在这里使用scoped_ptr确保

c++ - 应该使用哪个 header 来使用 scoped_ptr

我想在我的C++应用程序中使用智能指针。使用stdscoped_ptr应该包含哪个头文件? 最佳答案 标准C++库中没有scoped_ptr。全部C++11smartpointers在标题中.如果你想要boost::scoped_ptr那么你需要boost/scoped_ptr.hpp. 关于c++-应该使用哪个header来使用scoped_ptr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/q

c++ - 使用 shared_ptr 时奇怪的双析构函数调用

最后我找到了一个非常奇怪的错误,这是由两次调用析构函数引起的。这是重现错误的最少代码:#include#include#includeclasscEventSystem{public:cEventSystem(){std::cout(eventSystem);}voidonEvent(){}std::shared_ptrtileBrowser;};intmain(){cEventSystemeventSystem;cGuigui(eventSystem);}输出是:constructor:0x7fffffffe67fdestructor:0x7fffffffe2dfdestructor

c++ - 在赋值运算符中分配 std::shared_ptr

我正在创建自己的自定义Filter类以用于boost::filtered_graph。WeightMap概念必须具有默认构造函数、复制构造函数和赋值运算符。我创建了下面的类,它有一个std::shared_ptr私有(private)成员。我的问题是我应该如何编写赋值运算符。复制构造函数没有问题,但赋值运算符不起作用。classBFDMFilter{private:constBGraph*m_battlemap;conststd::shared_ptrm_mv_ab;public:BFDMFilter():m_battlemap(nullptr),m_mv_ab(){}BFDMFilt

c++ - std::unique_ptr 试图引用已删除的函数

我已经使用Unity一段时间了,然后回来使用VisualStudio2015做一些C++。我遇到了这个类定义classA{public:A();virtual~A();A(constA&)=delete;A&operator=(constA&)=delete;private:…}这个类是动态分配的,如下所示:ObjPtrobj=ObjPtr(newA());哪里ObjPtr是定义的类型,看起来像:typedefstd::unique_ptrobjPtr;并将这些创建的对象添加到std::vector使用std::move.有一次,我需要遍历对象列表,如果我找到满足我条件的对象,请保留一

c++ - 奇怪的运算符重载, "operator T& () const noexcept { return *_ptr; }"

我研究了一下,operator函数的格式是(returnvalue)operator[space]op(arguments){implementation}但是,在std::reference_wrapper实现中,有一个运算符重载函数声明为operatorT&()constnoexcept{return*_ptr;。这个运算符和T&operator()constnoexcept{return*_ptr;不同吗?}?.如果两者不同,那么第一个有什么用? 最佳答案 运算符T&()constnoexcept;是一个user-define

c++ - `auto` 类成员上下文中的返回类型

如何对类成员使用自动类型推导?比如下面的代码structA{autofoo();//fooisdefinedinanotherfile};intmain(){Aa;a.foo();}其中foo的返回类型为auto会导致以下错误:error:function'foo'withdeducedreturntypecannotbeusedbeforeitisdefineda.foo();^错误是可以理解的,因为编译无法在不知道其定义的情况下知道foo的返回类型是什么。我的问题是,如果函数的声明和定义分离,是否有任何变通方法或某种编程模式可以规避自动返回类型不能用于类成员函数的问题。

c++ - 为什么我不能将 std::unique_ptr 用作 "template<class> class"参数?

这段代码:#includetemplateclassPtr>classA{Ptrints;};usingB=A;产生以下错误(使用GCC6.3):a.cpp:6:28:error:type/valuemismatchatargument1intemplateparameterlistfor‘templateclassPtr>classA’usingB=A;^a.cpp:6:28:note:expectedatemplateoftype‘templateclassPtr’,got‘templateclassstd::unique_ptr’现在,我可以像这样解决这个问题:templateu

c++ - 返回一个新对象和另一个值

我想返回两个值,其中一个是一个新对象。我可以使用std::pair来做到这一点:classA{//...};std::pairgetA(){A*a=newA;//...}为了使代码异常安全,我想这样做:std::pair,int>getA(){std::auto_ptra(newA);//...}但这不会编译,因为如果不修改正在复制的auto_ptr就无法复制auto_ptr。好的,这意味着auto_ptr不能像其他类型那样很好地组合(以另一种方式)。在这种情况下返回新对象的好方法是什么?一种替代方法是返回一个shared_ptr,另一种方法是返回一个inout引用。但我正在寻找其他选

C++:auto 关键字 & 范围for

目录auto关键字:起源:  auto的使用细则:auto不能推导的场景:范围for:范围for的使用条件: C++的空指针:注意: auto关键字:起源: 随着程序越来越复杂,程序中用到的类型也越来越复杂,经常体现在:类型难于拼写含义不明确导致容易出错例如:std::map::iterator于是就有了auto关键字,C++11中,标准委员会赋予了auto全新的含义即:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。简单来说,auto可以从获取的数值中推导出我们想要得到的类型。intmain(){inti=0;int