草庐IT

exception_ptr

全部标签

c++ - `weak_ptr::expired` 对象 dtor 中的行为

考虑以下代码:#include#includeusingnamespacestd;classT;std::weak_ptrwptr;classT{public:T(){}~T(){std::cout();wptr=ptr;std::cout在这段代码中,我试图找出weak_ptr是否在对象销毁阶段过期。似乎是这样。输出是:notexpiredindtorexpired我使用gcc-5.1和ideone.现在,我有另一个问题。我找不到任何说明这是标准行为的文档。是否保证以这种方式工作,总是? 最佳答案 Now,Ihaveanother

c++ - `weak_ptr::expired` 对象 dtor 中的行为

考虑以下代码:#include#includeusingnamespacestd;classT;std::weak_ptrwptr;classT{public:T(){}~T(){std::cout();wptr=ptr;std::cout在这段代码中,我试图找出weak_ptr是否在对象销毁阶段过期。似乎是这样。输出是:notexpiredindtorexpired我使用gcc-5.1和ideone.现在,我有另一个问题。我找不到任何说明这是标准行为的文档。是否保证以这种方式工作,总是? 最佳答案 Now,Ihaveanother

c++ - 三法则的异常(exception)?

我读过很多关于C++RuleofThree的文章.许多人对此发誓。但是当规定规则时,它几乎总是包含“通常”、“可能”或“可能”这样的词,表示存在异常(exception)情况。我还没有看到太多关于这些异常(exception)情况的讨论——三法则不成立的情况,或者至少坚持三法则没有任何优势的情况。我的问题是我的情况是否是三法则的合法异常(exception)。我相信在我下面描述的情况下,明确定义的复制构造函数和复制赋值运算符是必要的,但是默认(隐式生成)析构函数可以正常工作。这是我的情况:我有两个类,A和B。这里有问题的是A。B是A的friend。A包含B对象。B包含一个A指针,该指针

c++ - 三法则的异常(exception)?

我读过很多关于C++RuleofThree的文章.许多人对此发誓。但是当规定规则时,它几乎总是包含“通常”、“可能”或“可能”这样的词,表示存在异常(exception)情况。我还没有看到太多关于这些异常(exception)情况的讨论——三法则不成立的情况,或者至少坚持三法则没有任何优势的情况。我的问题是我的情况是否是三法则的合法异常(exception)。我相信在我下面描述的情况下,明确定义的复制构造函数和复制赋值运算符是必要的,但是默认(隐式生成)析构函数可以正常工作。这是我的情况:我有两个类,A和B。这里有问题的是A。B是A的friend。A包含B对象。B包含一个A指针,该指针

c++ - 如何将 shared_ptr 与指向不应释放的结构的指针一起使用

目前我正在使用glib库中的一些函数。伴随着glib的还有gio。glib是一个C库,因此我需要删除我创建的一些结构。我为许多对象创建了一个智能指针,例如:std::shared_ptrmy_queue=std::shared_ptr(g_async_queue_create(),g_async_queue_unref);为此创建了一个指向GAsyncQueue的共享指针,这会在队列生命结束时安全地销毁队列。但是,当我从gio库中获得一个我不应该释放的指针时,我遇到了一个问题。在下面的代码中,my_connection是一个GSocketClient,它实现(在glib中)GIOStr

c++ - 如何将 shared_ptr 与指向不应释放的结构的指针一起使用

目前我正在使用glib库中的一些函数。伴随着glib的还有gio。glib是一个C库,因此我需要删除我创建的一些结构。我为许多对象创建了一个智能指针,例如:std::shared_ptrmy_queue=std::shared_ptr(g_async_queue_create(),g_async_queue_unref);为此创建了一个指向GAsyncQueue的共享指针,这会在队列生命结束时安全地销毁队列。但是,当我从gio库中获得一个我不应该释放的指针时,我遇到了一个问题。在下面的代码中,my_connection是一个GSocketClient,它实现(在glib中)GIOStr

c++ - Visual C++ 非托管代码 : Use/EHa or/EHsc for C++ exceptions?

如果我在非托管C++、VisualStudio2008或更高版本中创建新项目,我想使用哪种异常处理模型?我知道/EHa选项会导致代码效率降低,并且还会捕获SEH异常,对吧?所以我一直在避开该选项,通常使用/EHsc,因此我只在catch(...)处理程序中捕获实际抛出的C++异常,而不是捕获访问冲突和其他结构化执行.如果我的代码中存在访问冲突,我不希望它被catch(...){}掩盖。我与其他希望catch(...){}什么都不做的人一起编写代码,如果存在访问冲突,他们甚至希望它这样做,这对我来说似乎是一个非常糟糕的主意。如果由于编码不好而出现错误,您不想将手指放在耳朵里大声说“啦啦啦

c++ - Visual C++ 非托管代码 : Use/EHa or/EHsc for C++ exceptions?

如果我在非托管C++、VisualStudio2008或更高版本中创建新项目,我想使用哪种异常处理模型?我知道/EHa选项会导致代码效率降低,并且还会捕获SEH异常,对吧?所以我一直在避开该选项,通常使用/EHsc,因此我只在catch(...)处理程序中捕获实际抛出的C++异常,而不是捕获访问冲突和其他结构化执行.如果我的代码中存在访问冲突,我不希望它被catch(...){}掩盖。我与其他希望catch(...){}什么都不做的人一起编写代码,如果存在访问冲突,他们甚至希望它这样做,这对我来说似乎是一个非常糟糕的主意。如果由于编码不好而出现错误,您不想将手指放在耳朵里大声说“啦啦啦

c++ - 为什么我不能将 nullptr 转换为 weak_ptr<>

classMyClass{public:MyClass(std::weak_ptrparent){}}我想这样做:autonewInstance=std::make_shared(nullptr);或者weak_ptr参数的默认值为null,如:voidfunction(intarg,std::weak_ptrobj=nullptr);但是,我需要这样做:autonewInstance=std::make_shared(std::shared_ptr(nullptr));这是为什么呢? 最佳答案 因为weak_ptr在概念上只能从另

c++ - 为什么我不能将 nullptr 转换为 weak_ptr<>

classMyClass{public:MyClass(std::weak_ptrparent){}}我想这样做:autonewInstance=std::make_shared(nullptr);或者weak_ptr参数的默认值为null,如:voidfunction(intarg,std::weak_ptrobj=nullptr);但是,我需要这样做:autonewInstance=std::make_shared(std::shared_ptr(nullptr));这是为什么呢? 最佳答案 因为weak_ptr在概念上只能从另