草庐IT

unique_data

全部标签

c++ - 从 Qt 5.6 切换到 Qt 5.7 - 命名空间 std 中的 "no member ' make_unique'

我有一个CMakeQt项目,它使用了多个c++14功能,包括std::make_unique。通常这将通过以下方式处理:LIST(APPENDCMAKE_CXX_FLAGS-std=c++14)或ADD_COMPILE_OPTIONS(-std=c++14)我想将项目从5.6版升级到5.7版,但在测试构建期间出现多次失败并出现错误nomember'make_unique'innamespacestd我已验证所有适当的header和编译选项都已到位,并排除了任何环境问题。使用Qt5.7绝对是个问题。有什么解决方法吗? 最佳答案 原来这

c++ - 是否必须释放 std::string.c_str() 或 std::string.data() 返回的指针?

据我所知,当您调用c_str()/data()时,std::string会创建其内容的标识数组拷贝方法(有/没有终止NUL-char,在这里无关紧要)。不管怎样,对象是否也负责释放这个数组,还是我必须这样做?简而言之:std::stringhello("content");constchar*Ptr=hello.c_str();//useit....delete[]Ptr;////really???我只是想在内存分配方面保持安全。 最佳答案 不,您不需要释放ptr指针。ptr指向位于内部位置某处的不可修改字符串(实际上这是编译器的实

c++ - unique_ptr vs 类实例作为成员变量

有一个类SomeClass,它包含一些数据和操作这些数据的方法。并且必须使用一些参数创建它,例如:SomeClass(intsome_val,floatanother_val);还有另一个类,比如Manager,它包括SomeClass,并大量使用它的方法。那么,在性能(数据局部性、缓存命中等)方面会更好,将SomeClass的对象声明为Manager的成员并使用成员初始化在Manager的构造函数中或将SomeClass的对象声明为unique_ptr?classManager{public:Manager():some(5,3.0f){}private:SomeClasssome;

c++ - 任何类型的 unique_ptr 的 static_assert

我如何静态断言表达式是std::unique_ptr即std::unique_ptr对于任何T.static_assert(std::is_pointer()),"notasmartpointer")以上无效。如果没有什么直截了当的,我只对bool()感兴趣运算符是为类型定义的。 最佳答案 通过适当的部分特化创建您自己的特征:templatestructis_unique_ptr:std::false_type{};templatestructis_unique_ptr>:std::true_type{};

c++ - libstdc++ 的 std::vector<bool>::data 有什么作用?

根据标准,std::vector没有成员函数data().但是,以下代码片段可以使用带有libstdc++的最新GCC正常编译:#includeintmain(){std::vectorv;v.data();}如果我们尝试使用结果,结果返回类型是void.这是一些gcc扩展还是一个错误?如果前者为真,它有什么作用? 最佳答案 我的/usr/include/c++/4.8/bits/stl_bvector.h有://_GLIBCXX_RESOLVE_LIB_DEFECTS//DR464.Suggestionfornewmemberfu

c++ - 使用普通函数删除器构建 std::unique_ptr 的包装器

我正在尝试实现一个可以像这样使用的std::unique_ptr工厂:autofd=my_make_unique(fopen("filename","r"));即,将删除函数作为模板参数传递。我在C++11中的最佳尝试是:templatestructDeleter{voidoperator()(P*ptr){deleter(ptr);}};templatestd::unique_ptr>my_make_unique(P*ptr){returnstd::unique_ptr>(ptr);}在C++14中它更简洁:templateautomy_make_unique(P*ptr){stru

c++ - 复制构造函数中初始化列表中的 make_unique 是不使用 noexcept 说明符的良好目的吗?

我的复制构造函数旁边有一个noexcept说明符。#include#includeclassFoofinal{public:Foo()noexcept=default;Foo(constFoo&oth):impl_(std::make_unique()){}//impl_;};classFoo::Impl{...private:std::vectorsome_data;}当std::make_unique可以抛出bad_alloc时,我不确定是否应该将noexcept放在复制构造函数旁边。我们将不胜感激! 最佳答案 cpp编码指南在

c++ - 我能保证 std::unique 会保留第一个元素吗?

考虑一个排序的std::vector>基于对的第一个元素的比较。现在假设我申请:std::unique(std::begin(v),std::end(v),[](conststd::pair&x,conststd::pair&y){returnx.first==y.first;});我能保证std::unique将保留每个相等范围的第一个元素? 最佳答案 是的。Eliminatesallbutthefirstelementfromeveryconsecutivegroupofequivalentelementsfromtherang

c++ - std::unique_lock::release 的用例是什么?

在什么情况下会使用std::unique_lock的release方法?我错误地使用了release方法而不是unlock方法,我花了一段时间才明白为什么下面的代码不起作用。#include#include#include#include#includestd::mutexmtx;voidfoo(){std::unique_locklock(mtx);std::coutthreads;for(inti=0;i 最佳答案 它在thisanswer中有很好的用途其中锁定状态的所有权明确地从函数本地unique_lock转移到外部实体(通

c++ - std::unique_lock 和 std::condition_variable 如何工作

我需要弄清楚lock和condition_variable是如何工作的。在此处的-稍微修改过的代码中cplusplusreferencestd::mutexm;std::condition_variablecv;std::stringdata;boolready=false;boolprocessed=false;voidworker_thread(){//Waituntilmain()sendsdatastd::unique_locklk(m);cv.wait(lk,[]{returnready;});//afterthewait,weownthelock.std::coutlk(m