草庐IT

make-shared

全部标签

c++ - 为什么 shared_ptr<> 必须分别为控制 block 和管理对象分配?

此链接问题询问是否make_shared函数和shared_ptr构造函数不同。Whathappenswhenusingmake_shared部分答案是make_shared通常会在一次分配中为指向对象和智能指针控制block分配内存。shared_ptr构造函数使用两个分配。cppreference声明构造函数“必须”这样做,但没有给出任何理由。这是为什么?出于某种原因这是不可能的吗?还是因为其他原因被标准禁止? 最佳答案 想想std::shared_ptr构造函数是如何工作的:std::shared_ptr(newFoo());

c++ - "delete this"到一个用 std::shared_ptr 分配的对象?

我知道,每当您使用传统指针为new分配内容时,都可以在C++中说deletethis。事实上,我也知道如果你小心处理它是很好的做法。如果对象被std::shared_ptr持有,我可以让对象说deletethis吗?那应该调用析构函数,对吗?给你一个想法,我正在制作一个游戏,其中一艘船可以发射导弹,我想让导弹自行删除。 最佳答案 不,这不安全,对象的生命周期是由shared_ptr的持有者决定的,所以对象本身不能决定它是否要消亡。如果你这样做,你会得到双倍的当最后一个shared_ptr死亡时删除。我能提供的唯一解决方案是“重新考虑

c++ - Qt 智能指针相当于 Boost::shared_ptr ?

我在以前的项目中使用过Boost::shared_ptr,现在我想在Qt中找到一个智能指针,它可以做相同/相似的事情。由于Qt中有许多智能指针类,我想知道该使用哪一个。是QSharedPointer吗? 最佳答案 如果您使用过boost::shared_ptr,请继续使用它。首选boost::shared_ptr而不是任何Qt“扩展”,因为boost::shared_ptr被C++0x标准接受(std::shared_ptr). 关于c++-Qt智能指针相当于Boost::shared_

c++ - 如何将 boost::weak_ptr 转换为 boost::shared_ptr

我有一个shared_ptr和一个weak_ptrtypedefboost::weak_ptrclassnamePtr;typedefboost::shared_ptrxPtr;如何将weak_ptr转换为shared_ptrshared_ptr=weak_ptr;Xptr=classnameptr;????? 最佳答案 已经说过了boost::shared_ptrptr=weak_ptr.lock();如果你不想要异常或者只是使用强制转换构造函数boost::shared_ptrptr(weak_ptr);如果弱指针已经被删除,这

基于 C++ 的 make 系统

是否有不使用DSL而实际使用C++作为构建语言的构建系统? 最佳答案 YoDawg,我听说你喜欢C++,所以我将C++添加到你的构建系统中,所以你必须先编译再编译。 关于基于C++的make系统,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/5013827/

c++ - 为什么 std::sort() 比 std::make_heap() 快?

我有13721057我的元素std::vector.我需要对这个vector进行排序并获取前25个元素。我想,因为你可以在O(N)中构建一个堆弹出25个元素(每个元素都是O(logN))一定比在O(NlogN)中对整个vector排序更快.但是,当我对代码计时时:clock_ttStart=clock();sort(mostFrequent.begin(),mostFrequent.end(),greater());printf("Timetaken:%.2fs\n",(double)(clock()-tStart)/CLOCKS_PER_SEC);对比clock_ttStart=cl

c++ - 为什么我们不能将 "="用于 shared_ptr 或 unique_ptr?

这个问题在这里已经有了答案:Whydoesn'tshared_ptrpermitdirectassignment(5个答案)关闭5年前。我发现语法有编译错误。std::shared_ptrp=newint(5);3141E:\temprory(deleteitifulike)\1208.cpp[Error]conversionfrom'int*'tonon-scalartype'std::shared_ptr'requested不过没关系std::shared_ptrp(newint(5));与unique_ptr相同;但不知道为什么要禁止。

c++ - shared_ptr 空指针和赋值

我想像使用实际指针一样使用shared_ptr。我希望能够做类似的事情shared_ptra;a=newint(5);a=0;shared_ptrfoo()return0;但它不是默认实现的。我通过添加更改了boost库的shared_ptr的源代码templatevoidoperator=(inti){reset(i);}templatevoidreset(inti){this_type(i).swap(*this);}templatevoidoperator=(Y*p){reset(p);}shared_ptr(inti):px(0),pn(){}唯一的问题是如果我做a=-1;它会

c++ - 将 std::shared_ptr 转换为 QPointer

我们的应用程序设计得非常糟糕-它同时使用了std::shared_ptr和QObject父子关系来管理我们的一些对象。当QObject::~QObject时,这会导致段错误删除其子对象然后shared_ptr也尝试删除它。我们讨论过这个问题,但目前没有办法轻松解决这个问题,所以在我们解决它之前,我需要使用一些肮脏的技巧。现在我有一个std::shared_ptrgetMyObjectPtr()功能。我需要将结果放入QPointer-QPointers是弱指针,仅指示它们管理的QObject是否已删除。我无法以任何方式更改该功能,否则会破坏整个应用程序。我尝试了一些自定义解除分配器的ha

c++ - 关于在包含许多子目录的项目上使用 make 的反馈

对于我的面向对象编程类(class),我必须做一个期末项目(学术目的)。我想以“正确的方式”(即:makefile、模块化、DRY、易于扩展等)制作项目,以便更好地理解类、makefile和C++。我的想法是拥有一个“树源文件结构目录”,因此在每个子文件夹中我都会得到源文件及其标题、测试文件和单个makefile。因此,如果我想在界面上工作,我会转到子文件夹界面,编辑文件,运行测试,如果一切正常,只需将对象链接到我的根目录中即可。如果我想处理我的数据结构,也是一样,依此类推。一个不错的功能是在每个子文件夹中都包含源代码和目标文件,因此我的根目录中的链接器将搜索已在子文件夹中编译的目标文