草庐IT

unique_ptrs

全部标签

c++ - 在 map 中使用 unique_ptr 时删除 std::pair 中的函数

我有一段C++代码,我不确定它是否正确。考虑以下代码。#include#include#includeusingnamespacestd;intmain(intargc,char*argv[]){vector>>v;v.resize(5);returnEXIT_SUCCESS;}GCC编译这段代码没有问题。然而,英特尔编译器(版本19)因错误而停止:/usr/local/[...]/include/c++/7.3.0/ext/new_allocator.h(136):error:function"std::pair::pair(conststd::pair&)[with_T1=cons

c++ - `unique_ptr` 上的原子操作

std::shared_ptrhasspecializationsforatomicoperations像atomic_compare_exchange_weak和family,但我找不到关于std::unique_ptr的等效特化的文档。有没有?如果不是,为什么不呢? 最佳答案 可以提供std::shared_ptr的原子实例的原因并且不可能为std::unique_ptr这样做在他们的签名中暗示。比较:std::shared_ptr对比std::unique_ptr其中D是删除器的类型。std::shared_ptr需要分配一个

c++ - std::move 和 unique_ptr::reset 之间有什么区别?

对于std::unique_ptr的p1和p2,std::move()有什么区别>和std::unique_ptr::reset()?p1=std::move(p2);p1.reset(p2.release()); 最佳答案 根据[unique.ptr.single.assign]/2中移动分配的标准规范,答案应该是显而易见的:Effects:Transfersownershipfromuto*thisasifbycallingreset(u.release())followedbyanassignmentfromstd::forw

c++ - std::bind 通常与仅移动类型一起使用,特别是 std::unique_ptr 吗?

我正在尝试使用boost::asio并遇到了一些问题。我正在尝试编译以下代码:std::unique_ptrbuffer=buffers.pop();std::functiont=std::bind(&tcp_client::handle_read_done,this,std::placeholders::_1,std::placeholders::_2,std::move(buffer));如果我排除std::move(buffer),一切正常,当然是从handle_read_done的签名和作为std::bind中传递的参数。当试图将它传递给boost::asio::async_r

c++ - 为什么不再允许从数组的 unique_ptr 创建 shared_ptr?

来自cppreference:InC++11andC++14itisvalidtoconstructastd::shared_ptrfromastd::unique_ptr:std::unique_ptrarr(newint[1]);std::shared_ptrptr(std::move(arr));Sincetheshared_ptrobtainsitsdeleter(astd::default_deleteobject)fromtheunique_ptr,thearraywillbecorrectlydeallocated.ThisisnolongerallowedinC++17

c++ - 在这种情况下我应该使用 unique_ptr 还是 shared_ptr?

在我的QT应用程序的主窗口中,我使用std::shared_ptr来保存指向我的网络服务实例的指针,该实例管理与多个客户端的所有连接。现在,我必须将这个指针传递给多个子窗口,以便它们可以与客户端通信。我最好在主窗口和子窗口中使用std::shared_ptr成员变量并在创建子窗口时传递复制它,还是使用std更好::unique_ptr并将原始指针传递给子窗口,因为主窗口无论如何都会比子窗口长寿?非常感谢! 最佳答案 主要的实际区别是当主窗口被销毁而子窗口仍然存在并正在使用网络服务时会发生什么:如果您使用unique_ptr并传递原始

c++ - 为什么 std::unique_ptr 重置与赋值不同?

我想知道为什么std::unique_ptrp=newMyClass;没有效果,但是std::unique_ptrp;p.reset(newMyClass);很好。我有点理解它们的不同之处,但我想知道为什么选择让它们不同。assignment和reset不一样有什么危险? 最佳答案 首先,std::unique_ptrp=newMyClass;不是赋值,是copyinitialization.它不起作用,因为constructorofstd::unique采用原始指针标记为explicit:explicitunique_ptr(po

【C++】C++11——智能指针、内存泄漏、智能指针的使用和原理、RAII、auto_ptr、unique_ptr、shared_ptr、weak_ptr

文章目录C++117.智能指针7.1内存泄漏7.2智能指针的概念7.3智能指针的使用7.3.1auto_ptr7.3.2unique_ptr7.3.3shared_ptr7.3.4weak_ptrC++117.智能指针7.1内存泄漏  什么是内存泄漏:  内存泄漏指因为疏忽或错误造成程序未能释放已经不再使用的内存的情况。内存泄漏并不是指内存在物理上的消失,而是应用程序分配某段内存后,因为设计错误,失去了对该段内存的控制,因而造成了内存的浪费。  内存泄漏通常由于程序在设计上的缺陷或错误,例如动态分配内存后,未在合适的时间或无法正确释放该段内存,而导致的。内存泄漏通常需要程序员通过分析程序源代码

redis - 如何在避免竞争条件的同时实现相当于 "unique index"的 Redis?

我正在尝试使用Redis作为持久存储。我想将用户存储在Redis中,但我希望用户ID以及用户电子邮件地址是“唯一的”。这是我所在的地方:MULTISETusers:1""HSETusers-indexes:emailuser-email@gmail.com1EXEC我使用事务是因为我不希望数据库在Redis崩溃时最终处于无效状态。目前,这只会默默地覆盖现有值。如果电子邮件地址已存在于哈希中,我需要交易失败/回滚。我可以使用HSETNX来防止索引被覆盖,但是此时用户对象已经被覆盖了。我可以提前检查电子邮件地址是否存在于索引中,但那样我就会与其他客户发生争用情况。我可以向我的应用程序添加写

django - unique_together 在 Django-nonrel 中如何工作?

我正在使用django-nonrel和django-mongodb引擎。在引擎的documentation,它说它支持django的Meta选项。我尝试在这样的模型中使用unique_together:classBottler(models.Model):location=models.CharField(max_length=20)source=models.CharField(max_length=20)transactionID=models.CharField()classMeta:unique_together=(("location","source"),)但是这似乎没有用