草庐IT

weak_ptr_cast

全部标签

C++ 重载基于 shared_ptr 派生类的函数

有很多与此类似的SO问题,但我无法准确找到我要找的内容。如果这是重复的,我很抱歉。我有一个Parent类和继承自它的两个派生类:classSon:publicParent{...};classDaughter:publicParent{...};然后我声明两个shared_ptr到基类,并用shared_ptr实例化它们对于每个派生类:shared_ptrson=shared_ptr(newSon());shared_ptrdaughter=shared_ptr(newDaughter());最后,我想要一个处理shared_ptr的类基于它指向哪个派生类。问题是我可以使用函数重载来实

c++ - std::unique_ptr::reset 和构造函数异常

如果像这样初始化一个unique_ptr:std::unique_ptri;i.reset(newFoo());但是Foo::Foo()抛出了一个异常,问题是:分配的内存发生了什么?unique_ptr如何避免被泄露?这是在new运算符中处理的吗?析构函数肯定会在作用域退出时被调用。由于reset调用在newFoo()返回之前不会被调用,看来这必须由new处理,通过释放分配的内存当异常离开构造函数时。是这样吗? 最佳答案 如果在Foo的构造函数中抛出异常,那么唯一指针的reset函数将永远不会首先执行。因此唯一指针保留其原始值。如果

c++ - Qt 项目中的 unique_ptr

我有一个简单的Qt项目。我include但是std::unique_ptr不可用。我知道我应该使用Qt特定的智能指针,但我需要包含一个更大的项目,其中包含std::unique_ptr。我能做什么?谢谢! 最佳答案 智能指针需要C++11。根据您的Qt版本:添加CONFIG+=c++11如果您有Qt5及更高版本,则添加到您的.pro文件。它需要包括正如西蒙所说。如果您的版本早于Qt5,请尝试添加:QMAKE_CXXFLAGS+=-std=c++11 关于c++-Qt项目中的unique_

c++ - 我应该使用 shared_ptr<Object> myObject = (shared_ptr<Object>) new Object() 来访问私有(private)构造函数吗?

我正在使用广泛使用以下语法的代码库:shared_ptrmyObject=(shared_ptr)newObject();我注意到我无法使用make_shared访问私有(private)构造函数,但是shared_ptrmyObject=(shared_ptr)newObject();工作得很好。我应该仅仅因为它看起来有效而使用它吗?有什么危险吗?它与make_shared有何不同??我知道this中的答案问题,它在make_shared之间进行比较和:std::shared_ptrp2(newObject("foo"));但我没能找到对我遇到的语法的引用。和上面有什么不同,还是一样

c++ - 为什么 boost::ptr_list 使用底层 void *?

boostptr_listdocumentation声明容器使用底层std::list.为什么他们使用这种类型而不是更专业的std::list? 最佳答案 可能是为了减少模板实例化的数量。如果它使用std::list,然后每次使用ptr_list还将实例化std::list.如果您使用ptr_list,那将是很多实例化很多。 关于c++-为什么boost::ptr_list使用底层void*?,我们在StackOverflow上找到一个类似的问题: https

c++ - 如何避免 shared_ptr 歧义? (STL 与提升)

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whyis‘usingnamespacestd;’consideredabadpracticeinC++?我在我的代码中的很多地方都使用了STL的shared_ptr并且我在我使用过的任何地方都使用了以下using语句shared_ptr:usingnamespacestd::tr1;现在我需要使用boost::bimap。所以我必须在我的代码中包含以下头文件:#include一旦我包含了bimap头文件,shared_ptr类型就变得不明确了,我必须将shared_ptr的所有用法更改为std::tr1::

c++ - 从 Derived* 到 void* 到 Base* 的 static_cast

我想将指向派生类成员的指针转换为void*,然后从那里转换为基类的指针,如下例所示:#includeclassBase{public:voidfunction1(){std::cout(&d);Base*baseptr=static_cast(ptr);baseptr->function1();baseptr->function2();}这会编译并给出所需的结果(分别打印1和2),但它能保证工作吗?我在这里找到的static_cast的描述:http://en.cppreference.com/w/cpp/language/static_cast只提到转换为void*并返回到指向相同类

C++:Cast 运算符重载和引用

C++允许通过创建operatorT()来重载类型转换,其中T是我们要转换为的类型。现在,这个功能如何与引用一起发挥作用?例如:structY{inti;};structX{Yy;operatorY()const{returny;}};在这里,我们可以将X转换为Y,这将简单地返回包含的Y。但是,如果我们想转换为Y引用怎么办?例如,C++允许我们这样做:structX{Yy;operatorY&(){returny;}operatorconstY&()const{returny;}};现在,我们可以将X转换为Y引用或const引用(这也适用于constX)。第一个和第二个例子在语义上有什

c++ - 为什么 std::shared_ptr 没有 [] 运算符?

这个问题在这里已经有了答案:Whyisn'tthereastd::shared_ptrspecialisation?(1个回答)关闭7年前。我想知道std::shared_ptr没有为数组定义[]运算符这一事实背后的基本原理是什么。特别是为什么std::unique_ptr具有此运算符而不是std::shared_ptr?

c++ - 使用自定义删除器 boost scoped_ptr/scoped_array

我不知道如何让scoped_ptr或scoped_array使用自定义删除器。也许还有另一种实现类似于shared_ptr允许受控删除?顺便说一句,为什么shared_ptr允许自定义删除器而scoped_ptr不允许?只是好奇。 最佳答案 Idon'tseehowtogetscoped_ptrorscoped_arraytousecustomdeleter你不能。Maybethereisanotherimplementationwhichallowscontrolleddeletionsimilartoshared_ptr?如果您