草庐IT

non_lazy_ptr

全部标签

c++ - 将 unique_ptr 返回到多态类型

我试图通过从我的一些方法返回unique_ptr而不是原始指针来变得更安全。但是,在返回指向多态类型的唯一指针时,我有点困惑。我们如何返回指向派生类类型的基类类型的唯一指针?另外,作为一个不太重要的次要问题-我是否使用移动构造函数正确地从基类创建派生类?这是我的最小示例://StandardIncludes#include#include#include#include//--------------------------------------------------------------------------------------------------classBaseR

c++ - delete[] (ptr, 0) 的行为

是否定义了这段代码的行为?int*ptr=newint[10];operatordelete[](ptr,0);这段代码编译得很好,(在我的机器上)似乎什么也没发生。它的行为是否在某处定义? 最佳答案 在这个声明中operatordelete[](ptr,0);显式调用了释放函数voidoperatordelete[](void*,std::size_t)noexcept;调用中类型为size_t的第二个参数刚设置为0。当分配的内存大小不等于0时,第二个参数等于0的调用行为是未定义的。

c++ - 来自同一个 enable_shared_from_this 实例的两个 shared_ptr

鉴于这个类是enable_shared_from_this:classconnection:publicstd::enable_shared_from_this{//...};假设我从sameconnection*创建了两个std::shared_ptr实例,如下所示:std::shared_ptrrc(newconnection);std::shared_ptrfc(rc.get(),[](connectionconst*c){std::cout到目前为止一切正常,因为资源{connection*}由单个shared_ptr—rc准确地说,fc只是有一个假的删除器。之后,我这样做:a

c++ - 我的 API 函数应该采用 shared_ptr 还是 weak_ptr

我目前正在设计一个API,我不确定我的函数是否应该采用shared_ptr或weak_ptr.有包含查看器的小部件。观众有一个功能add_painter这给观众增加了一个画家。当查看器需要重新绘制时,它会使用其绘制器绘制到缓冲区中并显示结果。我得出的结论是观众应该使用weak_ptr捕获画家:一个画家可能被多个观众使用,所以观众不能拥有画家。删除画家应该将其从查看器中删除。这样,用户就不需要记住他们必须调用remove_painter。功能。可能有不同类型的查看器,因此它们隐藏在界面后面。什么签名最适合add_painter界面中的功能?我应该直接使用voidadd_painter(w

c++ - 一元负重载 : member or non-member?

假定前缀一元运算符可以“由不带参数的非静态成员函数或带一个参数的非成员函数实现”(§13.5.1[over.unary]/1),除了适用于任何成员/非成员函数选择的通常封装/代码重用设计原理之外,还有什么区别吗?对于二元运算符,there'sasemanticdifference因为非成员允许对其左侧操作数进行隐式转换。一元运算符似乎没有类似的东西,但标准将std::complex的一元否定运算符定义为非成员(§26.4.6[complex.ops]),而std::valarray和std::duration的一元否定运算符是成员(§26.6.2.6[valarray.unary],§

c++ - 将 std::exception_ptr 转换为 boost::exception_ptr

我想使用boost::promise::set_exception()需要一个boost::exception_ptr。问题是boost:exception_ptr似乎只有在我用enable_current_exception包裹所有我的抛出时才能正常工作,我想避免这种情况。(无论如何,我无法为第3方图书馆做到这一点。)我在整个代码中使用std::exception_ptr/std::current_exception,所以我正在寻找一种方法来传递std::exception_ptr,其中boost:exception_ptr是预期的。执行以下操作但编译的东西:boost::excep

c++ - unique_ptr 实现中可能存在的错误

这个问题在这里已经有了答案:Unique_ptrandforwarddeclaration(2个答案)关闭6年前。我试图将unique_ptr类成员与前向声明一起使用。正如许多消息来源所说,例如Forwarddeclarationwithunique_ptr?声明非内联析构函数应该就足够了,但在VS2013和GCC5.3.1中似乎并非如此。我没有测试其他编译器。例子:#includeclassB;classA{public://A();~A();private:std::unique_ptrb;};//classB{};intmain(){Aa;}我只能在取消注释ctor声明或类B声明

c++ - 在什么情况下 std::unique_ptr::operator[] 可能抛出?

我的类有一个operator[],它所做的就是在unique_ptr上调用std::unique_ptr::operator[]>成员(member)。相关部分就是这样:templatestructFoo{T&operator[](constsize_tpos)constnoexcept{returndata_[pos];}std::unique_ptrdata_;};我已将运算符标记为noexcept。但是,unique_ptr::operator[]不是noexcept。我无法找出原因,也不知道我是否可以假设它永远不会抛出。unique_ptr::operator[]本身没有在文档

c++ - 来自 Xcode 8.3.2 : Non-portable path to file - specified path differs in case from file name on disk 的错误警告

出于某种原因,我的代码库突然开始收到数以千计的此类警告。但到目前为止,所有有问题的文件和路径都是完全正确的,与我在磁盘上看到的与Finder相匹配。他们是不是在暗地里另有幕后?当问题实际上并不存在时,为什么Xcode会生成这些警告?尽管http://stackoverflow.com/questions/43067017/non-portable-path-to-file-file-h-specified-path-differs-in-case-from-file-na是关于相同的警告,在这种情况下我已经验证导入路径与磁盘上的文件名匹配。 最佳答案

c++ - 为什么 weak_ptr 没有 atomic_{store,load}?

为什么C++标准包含atomic_store或atomic_load重载shared_ptr而不是weak_ptr?这只是一个疏忽,还是有没有为weak_ptr提供原子操作的实际原因? 最佳答案 这似乎是一个疏忽。HerbSutter为atomic_shared_ptr/atomic_unique_ptr/atomic_weak_ptr提出了一个C++(17?)标准设计提案,该文档还解释了现有方法的缺点,其中包含用于shared_ptr的免费函数atomic_load/atomic_store:http://www.open-std