草庐IT

non-unique

全部标签

c++ - 具有 std::unique_ptr 与 boost::ptr_container 的 STL 容器

有了c++11,我问自己是否可以替换c++11中的boost::ptr_containers。我知道我可以使用例如一个std::vector>,但我不确定这是否是一个完整的替代品。处理这些情况的推荐方法是什么? 最佳答案 我决定编写一个简短的程序,将一些多态对象放入一个容器中(通过指向堆的指针),然后将该容器与std::algorithm一起使用。我选择了std::remove_if只是一个例子。这是我将如何使用vector>:#include#include#includeclassAnimal{public:Animal()=d

c++ - 将 emplace_back 与 unique_ptrs 容器一起使用是否安全?

考虑以下几点:std::vector>ptrsToInts;ptrsToInts.emplace_back(newint);如果vector中发生重新分配,并且失败(抛出std::bad_alloc),我是“安全”还是会泄漏int?C++1123.3.6.5[vector.modifiers]/1说:Ifanexceptionisthrownotherthanbythecopyconstructor,moveconstructor,assignmentoperator,ormoveassignmentoperatorofTorbyanyInputIteratoroperationthe

c++ - unique_ptr & vector,试图访问已删除的函数,Visual Studio 2013

我正在尝试使用unique_ptr来管理我的内存,而VS2013似乎在我认为不应该的时候给我带来了麻烦。似乎编译器出于某种原因试图访问已删除的复制构造函数,而它确实没有理由这样做。这是我的一门课的样子:classMesh{public:Mesh(oglplus::Program*program,conststd::vector&vertices,conststd::vector&indices);voiddraw();private:constoglplus::Program*_program;std::vector_vertices;std::vector_indices;oglpl

c++ - 为什么构造函数调用异常后没有释放unique_ptr?

在以下代码中:#include#includevoidmydeallocator(int*x){std::cerr>x;Foo(boolfail):x(newint(1),mydeallocator){if(fail)throwstd::runtime_error("Wefailhere");}};intmain(){{autofoo1=Foo(false);}{autofoo2=Foo(true);}}当调用Foo(true)时,似乎没有正确释放内存。也就是说,当我们编译并运行这个程序时,我们得到了结果:Freeingmemoryterminatecalledafterthrowin

c++ - dll 中的 std::unique_ptr pimpl 使用 Visual Studio 生成 C4251

这不是一个重大问题,但我喜欢从警告中清除我的代码,所以这让我很紧张。我一直在使用c++11版本的pimplidiom以通常的方式隐藏我的库的类实现。//dllheaderclassFrameworkImpl;classEXPORT_APIFramework{Framework(constFramework&)=delete;Framework&operator=(constFramework&)=delete;Framework(Framework&&)=delete;Framework&operator=(Framework&&)=delete;public:Framework();

c++ - 如何将 "fat"库转换为 "non-fat"库?

我正在尝试从具有armv6和armv7架构的库中删除重复对象,即,$lipo-infolibx.aArchitecturesinthefatfile:libx.aare:armv6armv7正如预期的那样,“ard”不能直接工作,所以我使用“lipo-extract”来拆分库。但是,生成的库仍然是“胖”架构。$ardlibx-armv6.aoffendingduplicate.oar:libx-armv6.aisafatfile(uselibtool(1)orlipo(1)andar(1)onit)ar:libx-armv6.a:Inappropriatefiletypeorforma

c++ - 从 boost::non_copyable 私下或公开继承?

您会推荐哪种做法,为什么?classFoo:publicboost::noncopyable{};对比classFoo:privateboost::noncopyable{};我无法想象需要使用Foo的实例作为boost::noncopyable,所以在这种情况下我倾向于私有(private)继承。 最佳答案 boost::noncopyable没有声明virtual析构函数,即不是设计为公共(public)继承链的基础。始终私下继承它。 关于c++-从boost::non_copyab

c++ - 为什么 std::lock_guard/std::unique_lock 不使用类型删除?

为什么要std::lock_guard和std::unique_lock需要将锁类型指定为模板参数吗?考虑以下替代方案。首先,在detail命名空间中,有类型删除类(非模板抽象基类和模板派生类):#include#include#include#includenamespacedetail{structlocker_unlocker_base{virtualvoidlock()=0;virtualvoidunlock()=0;};templatestructlocker_unlocker:publiclocker_unlocker_base{locker_unlocker(Mutex&

c++ - unique_ptr 的 static_pointer_cast 的替代方案

我了解将static_pointer_cast与unique_ptr一起使用会导致所包含数据的共享所有权。换句话说,我想做的是:unique_ptrfoo=fooFactory();//dosomethingforawhileunique_ptrbar=static_unique_pointer_cast(foo);无论如何,这样做会导致两个unique_ptr永远不应该同时存在,所以它是被禁止的。是的,这是有道理的,绝对是,这就是为什么确实不存在像static_unique_pointer_cast这样的东西。到目前为止,如果我想存储指向这些基类的指针,但我还需要将它们强制转换为一些

C++ std::unique_ptr 从函数返回并测试 null

我有一个函数需要返回一个指向myClass类对象的指针。为此,我使用std::unique_ptr。如果函数成功,它应该返回一个指向带有数据的对象的指针。如果失败,它应该返回null。这是我的代码框架:std::unique_ptrgetData(){if(dataExists)...createanewmyClassobject,populateandreturnit...//Nodatafoundreturnstd::unique_ptr(null);//在main上:main(){std::unique_ptrreturnedData;returnedData=getData()