草庐IT

weak_ptr_cast

全部标签

c++ - 将 shared_ptr 转换为 auto_ptr?

我需要在我的代码中从shared_ptr获取auto_ptr。我可以进行反向操作——将auto_ptr转换为shared_ptr,因为shared_ptr具有这样的构造函数:templateexplicitshared_ptr(std::auto_ptr&r);我可以将shared_ptr转换为auto_ptr吗?还是设计上不可能? 最佳答案 这在设计上是不可能的,因为该对象可能与其他共享指针共享,因此将其“提取”到auto_ptr可能会导致删除引用的对象。出于同样的原因,shared_ptr没有像auto_ptr那样的“relea

c++ - 单例模式和 std::unique_ptr

std::unique_ptr唯一地控制它指向的对象,因此不使用引用计数。单例确保只能使用引用计数创建一个对象。std::unique_ptr会和单例一样执行吗? 最佳答案 单例确保一种类型只有一个实例。unique_ptr确保只有一个智能指针指向任何实例。 关于c++-单例模式和std::unique_ptr,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/15906509/

c++ - 指向指针的 Static_cast 整数地址

为什么以下内容需要C风格的转换?int*ptr=static_cast(0xff);//error:invalidstatic_castfromtype'int'//totype'int*'int*ptr=(int*)0xff;//ok. 最佳答案 static_cast只能在两个相关类型之间进行转换。整数与指针无关,反之亦然,因此您需要改用reinterpret_cast,它告诉编译器重新解释整数的位,就好像它们是指针(反之亦然):int*ptr=reinterpret_cast(0xff);阅读以下内容了解更多详情:Typeco

c++ - boost::smart_ptr 可以用在 std 容器中吗?

scoped_ptr、shared_ptr等boost::smart_ptr可以用在std::map等std容器中吗?classSomeClass{std::map>a_map;};作为boost::smart_ptrcanbeusedforpolymorphism,在这种情况下也是如此吗?容器的销毁会触发子类的正确销毁吗? 最佳答案 scoped_ptr不能在标准容器中使用,因为它不能被复制(这是容器接口(interface)所要求的)。但是,可以使用shared_ptr。如果您不能使用C++11而您已经在使用boost,请考虑p

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++ - 这是 const_cast 的未定义行为吗?

这个问题在这里已经有了答案:behaviorofconst_castinC++[duplicate](3个答案)关闭8年前。这里发生了什么?constinta=0;constint*pa=&a;int*p=const_cast(pa);*p=1;//undefinedbehavior??cout我的编译器输出0和1,但是“a”的地址和“p”的值是相同的,所以我很困惑这怎么可能。

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;}

c++ - reinterpret_cast to void* 不使用函数指针

我想重新解释将函数指针转换为void*变量。函数指针的类型将为Class*(*)(void*)。下面是示例代码,classTest{inta;};intmain(){Test**p(void**a);void*f=reinterpret_cast(p);}以上代码适用于VisualStudio/x86编译器。但是使用ARM编译器,它会给出编译错误。不知道为什么。Error:#694:reinterpret_castcannotcastawayconstorothertypequalifiers我阅读了Castingafunctionpointertoanothertype中的解释我担心