草庐IT

week_ptr

全部标签

c++ - 数组的 auto_ptr

简而言之,我想知道数组是否有类似auto_ptr的类型。我知道我可以自己推出,我只是确保那里没有什么东西。我也知道vector。但是我不认为我可以使用它们。我正在使用几个WindowsAPI/SDK,例如WindowsMediaSDK、DirectShowAPI,它们是为了取回一些结构来调用一个函数,该函数需要一个指针和一个大小两次。第一次传递NULL作为指针来取回我必须分配的结构的大小,以便接收我正在寻找的数据。例如:CComQIPtrpProps(m_pStreamConfig);DWORDcbType=0;WM_MEDIA_TYPE*pType=NULL;hr=pProps->G

c++ - 数组的 auto_ptr

简而言之,我想知道数组是否有类似auto_ptr的类型。我知道我可以自己推出,我只是确保那里没有什么东西。我也知道vector。但是我不认为我可以使用它们。我正在使用几个WindowsAPI/SDK,例如WindowsMediaSDK、DirectShowAPI,它们是为了取回一些结构来调用一个函数,该函数需要一个指针和一个大小两次。第一次传递NULL作为指针来取回我必须分配的结构的大小,以便接收我正在寻找的数据。例如:CComQIPtrpProps(m_pStreamConfig);DWORDcbType=0;WM_MEDIA_TYPE*pType=NULL;hr=pProps->G

c++ - 持有派生类引用的基类的 std::unique_ptr 在 gcc 编译器中不显示警告,而裸指针显示它。为什么?

我有一个基类和派生类的层次结构。基类有一个被派生类覆盖的虚函数。classBase{public:~Base();virtualvoidother_functionality()=0;};classDerived:publicBase{public:~Derived();voidother_functionality(){//somecode};};现在如果我这样做:intmain(){Base*P=newDerived();deletep;return0;}报错:删除具有非虚析构函数的多态类类型的对象。但是使用unique_ptr它会毫无警告地通过。intmain(){std::un

c++ - 持有派生类引用的基类的 std::unique_ptr 在 gcc 编译器中不显示警告,而裸指针显示它。为什么?

我有一个基类和派生类的层次结构。基类有一个被派生类覆盖的虚函数。classBase{public:~Base();virtualvoidother_functionality()=0;};classDerived:publicBase{public:~Derived();voidother_functionality(){//somecode};};现在如果我这样做:intmain(){Base*P=newDerived();deletep;return0;}报错:删除具有非虚析构函数的多态类类型的对象。但是使用unique_ptr它会毫无警告地通过。intmain(){std::un

c++ - 将 unique_ptr 移入 lambda 时,为什么不能调用 reset?

当将std::unique_ptr移动到lambda中时,无法在其上调用reset(),因为它似乎是const:errorC2662:voidstd::unique_ptr>::reset(int*)noexcept':cannotconvert'this'pointerfrom'conststd::unique_ptr>'to'std::unique_ptr>&#includeintmain(){autou=std::unique_ptr();autol=[v=std::move(u)]{v.reset();//thisdoesn'tcompile};}为什么会这样?是否有可能以另一

c++ - 将 unique_ptr 移入 lambda 时,为什么不能调用 reset?

当将std::unique_ptr移动到lambda中时,无法在其上调用reset(),因为它似乎是const:errorC2662:voidstd::unique_ptr>::reset(int*)noexcept':cannotconvert'this'pointerfrom'conststd::unique_ptr>'to'std::unique_ptr>&#includeintmain(){autou=std::unique_ptr();autol=[v=std::move(u)]{v.reset();//thisdoesn'tcompile};}为什么会这样?是否有可能以另一

c++ - std::unique_ptr 如何没有大小开销?

如果空类的大小不能为0,std::tuple有什么魔力,所以unique_ptr的sizeof在64位机器中返回8?在unique_ptr中,成员定义为:typedefstd::tuple__tuple_type;__tuple_type_M_t;其中_Dp是删除器类。编译器是gcc版本4.7.1(Debian4.7.1-7) 最佳答案 原因是typename_Dp=default_delete是一个空类,tuple模板采用空基类优化。如果您实例化unique_ptr使用非默认删除,您应该会看到大小增加。

c++ - std::unique_ptr 如何没有大小开销?

如果空类的大小不能为0,std::tuple有什么魔力,所以unique_ptr的sizeof在64位机器中返回8?在unique_ptr中,成员定义为:typedefstd::tuple__tuple_type;__tuple_type_M_t;其中_Dp是删除器类。编译器是gcc版本4.7.1(Debian4.7.1-7) 最佳答案 原因是typename_Dp=default_delete是一个空类,tuple模板采用空基类优化。如果您实例化unique_ptr使用非默认删除,您应该会看到大小增加。

c++ - 两个 unique_ptr<T> 的无锁交换

交换两个unique_ptr不能保证是线程安全的。std::unique_ptra,b;std::swap(a,b);//notthreadsafe由于我需要原子指针交换,并且我喜欢unique_ptr的所有权处理,有没有一种简单的方法可以将它们结合起来?编辑:如果这是不可能的,我愿意接受替代方案。我至少想做这样的事情:threadshared_unique_ptrglobal;voidf(){threadlocal_unique_ptrlocal(newT(...));local.swap_content(global);//atomicallyforglobal}在C++11中这样

c++ - 两个 unique_ptr<T> 的无锁交换

交换两个unique_ptr不能保证是线程安全的。std::unique_ptra,b;std::swap(a,b);//notthreadsafe由于我需要原子指针交换,并且我喜欢unique_ptr的所有权处理,有没有一种简单的方法可以将它们结合起来?编辑:如果这是不可能的,我愿意接受替代方案。我至少想做这样的事情:threadshared_unique_ptrglobal;voidf(){threadlocal_unique_ptrlocal(newT(...));local.swap_content(global);//atomicallyforglobal}在C++11中这样