草庐IT

make_shared

全部标签

c++ - 为什么要用 make_unique 调用来初始化 unique_ptr?

取自:http://herbsutter.com/2013/05/22/gotw-5-solution-overriding-virtual-functions/为什么要写:autopb=unique_ptr{make_unique()};不仅仅是:autopb=make_unique();我唯一的猜测是,如果我们想要auto,我们需要帮助它推断出正确的类型(这里是base)。如果是这样,那么对我来说这将是一个值得怀疑的优点..键入auto然后在=的右侧键入大量初始化..我错过了什么? 最佳答案 嗯,重点是第一个选项使pb一个uni

用于资源管理的 C++ shared_ptr 与 unique_ptr

我一直在考虑使用unique_ptr与shared_ptr与own_solution。我对后者打了折扣,因为我几乎肯定会弄错,但我对unique_ptr和shared_ptr都有问题,因为它们都不能准确捕获我想要的内容。我想创建一个明确拥有资源的资源管理器,但我希望资源管理器也分发对该资源的引用。如果我在资源管理器中使用unique_ptr并分发原始指针,则它们有可能逃逸到其他地方(尽管我想这会违反类“契约”)。如果我使用shared_ptr并分发weak_ptr,没有什么可以阻止调用者将weak_ptr转换为shared_ptr并且存储它,从而可能创建一个循环或更糟的是,资源在资源管

c++ - 如何使用 std::make_heap

关闭。这个问题需要更多focused.它目前不接受答案。想改进这个问题吗?更新问题,使其只关注一个问题editingthispost.关闭8年前。Improvethisquestionhttp://www.cplusplus.com/reference/algorithm/push_heap/太乱了。要在std中使用堆,首先将元素放入vector中,然后调用std::make_heap(v.begin(),v.end());如果我向vector中插入元素会怎样?堆会弄乱吗?比如v一开始可能有10个元素,我只做第3个元素到第7个元素的堆,现在我往第5个和第9个位置插入元素,这个过程中堆结

C++ 如何断言 vector 中的所有 std::shared_ptr 都引用了某物

当我有一个函数接收一个应该引用某物的(智能)指针时,我总是这样开始:classFoo;voiddoSomething(conststd::shared_ptr&pFoo){assert(pFoo);//...}现在我正在为(智能)指针的vector(或其他容器)寻找类似的断言条件。我能想到的最好的办法是:voiddoSomething(conststd::vector>&pFoos){assert(std::all_of(pFoos.begin(),pFoos.end(),[](conststd::shared_ptr&pFoo){returnpFoo;}));//...}我想知道这是

c++ - 从引用创建 shared_ptr

我是C++的新手,这个接缝就像一个菜鸟问题,但我无法通过互联网上的其他资源解决它。我正在尝试从引用创建一个shared_ptr。我有以下Book类:#include#include"Author.hpp"classBook{public:voidsetAuthor(constAuthor&t_author);private:std::shared_ptrm_author;}这是我的Author类:#includeclassBook;classAuthor{public:voidaddBook(constBook&t_book);private:std::vector>m_books;}

java - 我可以使用 C++ Boost shared_ptr 进行编程,就好像我在用 Java 编写代码一样,而不关心内存管理吗?

我用C/C++编写代码已经有一段时间了,现在我正在做的项目需要它的效率。我从这个shared_ptr中了解到,它基本上是在我需要时删除对象。因此,例如,如果我的对象有一个shared_ptrvector,我就不必担心遍历vector并删除析构函数中的每个元素了吗?也就是说,我只要用这些就不用担心内存管理了?还是我完全误解了这一点?听起来好得令人难以置信。 最佳答案 你必须明白共享指针是使用引用计数实现的,这意味着如果你的指针图中有循环,那么对象将不会被释放。也就是说,如果a指向b,b指向a,但没有任何东西指向a或b,那么a和b都不会

c++ - 通过 make_shared 用 shared_ptr 包装动态数组

我想将一些字节写入数组。为了使用现代C++,我决定使用智能指针。#include#includeusingnamespacestd;voidwriteUint32_t(uint32_tvalue,unsignedchar*p){*p=static_cast((value>>24)&0xFF);*(++p)=static_cast((value>>16)&0xFF);*(++p)=static_cast((value>>8)&0xFF);*(++p)=static_cast((value)&0xFF);}intmain(){autobuf=make_shared(512);uint32_

Golang中make与new有何区别

📕作者简介:过去日记,致力于Java、GoLang,Rust等多种编程语言,热爱技术,喜欢游戏的博主。📗本文收录于go进阶系列,大家有兴趣的可以看一看📘相关专栏Rust初阶教程、go语言基础系列、spring教程等,大家有兴趣的可以看一看📙Java并发编程系列,设计模式系列、goweb开发框架系列正在发展中,喜欢Java,GoLang,Rust,的朋友们可以关注一下哦!文章目录前言变量的声明newmakemake与new的异同前言本文主要给大家介绍了Go语言中函数new与make的使用和区别,关于Go语言中new和make是内建的两个函数,主要用来创建分配类型内存。在我们定义生成变量的时候,可

iOS 沙发底座 : Shared CBL manager between app and app extension

我正在尝试在iOS应用程序和应用程序扩展之间实现一个共享的couchbase数据库,但是这两个目标之间存在一致性问题。当应用程序管理器删除couchbaseliteiOS中的数据库文档时,应用程序扩展管理器就会过时。有谁知道如何将此删除通知扩展管理器?数据库保存在共享App组中。我已尝试在我的扩展中为数据库创建一个拉式复制,但没有按预期工作。如果我每次从我的扩展程序读取数据库时都创建一个新管理器,它会按预期工作,但这将为每次读取创建一个新线程。谢谢! 最佳答案 这blog和关联的示例应用说明了iOS应用和Today应用扩展之间的数据

ios 核心数据 : make sure object is deleted from data source

更新:在评论中有人指出我不必要地分派(dispatch)到主线程。在删除调度和不必要的begin/endupdates之后,现在当我尝试删除一个单元格时,它调用didChangeObjectwithcaseNSFetchedResultsChangeUpdate(相反到NSFetchedResultsChangeDelete),它调用configureCell。导致程序崩溃的行是CollectedLeaf*theCollectedLeaf=[collectionFetchedResultsControllerobjectAtIndexPath:indexPath];在下面的方法中。崩溃