草庐IT

non-unique

全部标签

c++ - Visual Studio 2015 "non-standard syntax; use ' &' to create a pointer to member"

我正在尝试用C++实现自己的链表,但终究无法弄清楚为什么会出现此错误。我知道有一个STL实现,但出于某种原因,我正在尝试自己的实现。这是代码:#includetemplateclassListElement{public:ListElement(constT&value):next(NULL),data(value){}~ListElement(){}ListElement*getNext(){returnnext;}constT&value()const{returnvalue;}voidsetNext(ListElement*elem){next=elem;}voidsetValu

c++ - std::make_unique<T[]>(size) 值初始化

是std::make_unique(1000)总是值初始化元素?好吧,我研究了实现,clang以及g++都在使用newT[size]()进行值初始化。但我找不到符合C++14/17标准的实现必须这样做。 最佳答案 如果标准库符合C++14,那么是的,它必须这样做(使用newT[size])。来自C++14§20.8.1.4[unique.ptr.create]/4:templateunique_ptrmake_unique(size_tn);Returns:unique_ptr(newremove_extent_t[n]()).

c++ - 当在类主体中使用 unique_ptr 声明析构函数作为同一类的成员时出现编译器错误

下面是代码的极简问题:structB{B()=default;//~B(){};//error:useofdeletedfunction‘B&B::operator=(constB&)’std::unique_ptrm_pB=nullptr;};intmain(){std::vectorvB;vB.erase(vB.begin());}除非取消注释析构函数,否则以上代码可以正常编译。根据我的要求,我需要一个~B()的正文明确定义。如何使用unique_ptr定义析构函数的主体?同类共存?注意:尝试定义=default复制和移动构造函数的版本无济于事。在我的真实代码中,unique_pt

c++ - 线程错误 : invalid use of non-static member function

这个问题在这里已经有了答案:Passingmemberfunctionstostd::thread[duplicate](2个答案)关闭5年前。我想了解C++中的线程,但我不知道如何解决这个问题。我想调用两个线程来运行名为“createS”的函数,但出现此错误:error:invaliduseofnon-staticmemberfunction我读过关于这个主题的其他问题,但我真的不明白如何让我的代码工作。有人可以向我解释我做错了什么并尝试帮助我找到解决方案吗?test_class.cppvoidtest_class::generateS(){map1=newmultimap>;map

c++ - 带有参数 std::unique_ptr<T>&& 的 std::move 或 std::forward

我有以下模板类(精简后只包含相关部分)和一个名为Push的方法用C++11编写:templateclassCircularStack{private:std::array,Capacity>_stack;public:voidPush(std::unique_ptr&&value){//somecodeomittedthatupdatesan_indexmembervariable_stack[_index]=std::move(value);}}我的问题是:ShouldIbeusingstd::moveorstd::forwardwithinPush?我不确定std::unique_

c++ - std::unique_ptr::reset 和构造函数异常

如果像这样初始化一个unique_ptr:std::unique_ptri;i.reset(newFoo());但是Foo::Foo()抛出了一个异常,问题是:分配的内存发生了什么?unique_ptr如何避免被泄露?这是在new运算符中处理的吗?析构函数肯定会在作用域退出时被调用。由于reset调用在newFoo()返回之前不会被调用,看来这必须由new处理,通过释放分配的内存当异常离开构造函数时。是这样吗? 最佳答案 如果在Foo的构造函数中抛出异常,那么唯一指针的reset函数将永远不会首先执行。因此唯一指针保留其原始值。如果

c++ - Qt 项目中的 unique_ptr

我有一个简单的Qt项目。我include但是std::unique_ptr不可用。我知道我应该使用Qt特定的智能指针,但我需要包含一个更大的项目,其中包含std::unique_ptr。我能做什么?谢谢! 最佳答案 智能指针需要C++11。根据您的Qt版本:添加CONFIG+=c++11如果您有Qt5及更高版本,则添加到您的.pro文件。它需要包括正如西蒙所说。如果您的版本早于Qt5,请尝试添加:QMAKE_CXXFLAGS+=-std=c++11 关于c++-Qt项目中的unique_

c++ - unique_ptr::deleter_type::pointer 有什么用?

std::unique_ptr指定存储不是T*如您所料,但是类型为std::unique_ptr::pointer的对象.这基本上定义为D::pointer如果存在这样的类型,并且T*否则。因此,您可以通过适本地自定义删除器来自定义底层原始指针类型。什么时候这样做是个好主意?它是干什么用的?我能找到的唯一讨论是thisnote,这暗示“更好地支持[ing]共享内存上下文中的容器和智能指针”,但这并没有完全说明很多问题。 最佳答案 最初的动机是启用boost::offset_ptr的使用作为unique_ptr下的表示,这将允许在进程

c++ - 如果我需要多态性,我应该使用原始指针而不是 unique_ptr 吗?

如果我需要多态性,我应该使用原始指针而不是unique_ptr吗?我看到一些线程显示如何使用unique_ptr进行多态行为。我不确定这是否值得,我宁愿使用原始指针。您能否对此发表评论,您对这种情况下原始指针与智能指针的看法? 最佳答案 下面的简单代码表明std::unique_ptr从多态性的角度来看工作得很好,打印"HellofromDerived."。#include#includeusingstd::cout;structBase{virtual~Base(){}virtualvoidSayHello(){coutpBase

c++ - 在 C++ 中将具有 unique_ptr 的对象插入 vector

我有一个简单的类结构来模拟离散模拟,它有一个状态vector,每个状态包含许多转换,作为智能指针vector保存。我使用智能指针来保存转换,因为在我的完整应用程序中我需要多态性。#include#includeclassTransition{public:Transition(){}};classState{public:State(intnum):num(num),transitions(){}voidadd_transition(std::unique_ptrtrans){transitions.push_back(std::move(trans));}private:intnum