引用计数智能指针类实现共享所有权
我对用户空间RCU(读取-复制-更新)非常感兴趣,并尝试通过tr1::shared_ptr模拟一个,这是代码,虽然我确实是并发编程的新手,但一些专家
时隔很长一段时间,我又回到了C++,继承了一个代码库,其中一部分具有以下代码的结构。我有两个对象,Wrapped 和 Wrapper,正如所料,Wrap...
当我运行此代码时: #包括 #包括 A类{ 民众: 虚拟 std::unique_ptr 克隆() = 0; }; B 类:公共 A { 私人的: 整数b0; 民众: B(缺点...
错误:返回对临时 [-Werror=return-local-addr] 的引用
我有一些代码看起来像这样 类接口 {}; 包含类; 容器类 { 民众: Container() : m_contained(std::make_shared(*this)) { } 是...
在创建shared_ptr的副本之前,原始的shared_ptr是否可能超出范围
这可能是一个愚蠢的问题,但我无法回答。 使用下面的代码片段,输出是否有可能打印“Shared Ptr out of range” 我正在尝试的是在共享之前
lambda catpure 中的shared_from_this() 和weak_frome_this() 有什么区别?
我正在使用 boost::asio 创建异步客户端。我看到了两种编码风格。 使用shared_from_this 无效开始(){ tcp::endpoint 端点(boost::asio::ip::address::from_string("127.0.0.1&...
我正在重新设计我的游戏引擎以使用智能指针。我有一个对象类,所有东西都继承自它。我有一个可渲染的 GameObject,因此它继承自 IRenderabl...
我可以安全地将 boost::shared_array<T> 替换为 std::shared_ptr<T[]> 吗?
我正在开发一个使用 boost::shared_array 的 C++14 代码库。如果我理解正确的话,scoped_array和shared_array是新[]分配的scoped_ptr和shared_ptr的等价物,它们......
使用 std::shared_ptr 时 C++ 中的段错误
在下面的代码中,使用 std::shared_ptr 时出现分段错误。然而,当使用普通指针时,不会出现同样的问题。 综上所述,我想定义一个 ConstrainedVariable ob...
我正在用 C++ 实现 A* 寻路算法来解决迷宫问题,但当迷宫尺寸较大(~10,000x10,000 或更大)时,我遇到了分段错误 (SIGSEGV)。 错误发生在...
原子>内部如何工作?我并不是要求控制块的机制以及存储的数据,这对我来说很容易想象,但对于 ato...
我有一个类Box,并假设它的重量相当重(例如内存密集型+动态分配的数据)。我有另一个类 BoxWrapper,顾名思义,它本质上是一个包装...
为什么 std::shared_ptr 从基类和派生类调用析构函数,而 delete 仅从基类调用析构函数? [重复]
为什么当使用 std::shared_ptr 释放时会调用基类和派生类的析构函数,而第二个示例仅调用基类的析构函数? 类基类 { 民众: 〜基础() {...
C++ Primer 5th Ed - Stanley Lipmann:关于与shared_ptr.reset()结合使用的shared_ptr.unique()的问题
首先我们有一个shared_ptr定义如下: Shared_ptr p(new int(42)); 根据下面的文字: 重置成员经常与独特的一起使用 控制对象的变化
为连接对象创建shared_ptr时出现Boost-Mysql错误
我有以下代码,其中包含使用shared_ptr的boost::mysql连接。我想在应用程序运行时保留连接对象。我想要申请
我正在 C++ 中使用一个 C 库,该库在其 API 中使用了很多指针。 为了使事情正常工作而不被内存管理烦恼,我广泛使用 std::shared_ptr 和 std::unique_ptr...
为什么下面这个简单的C++程序会出现shared_ptr段错误? 是因为块不应该用 std::make_shared(BLOCKSIZE) 初始化吗? 如果我使用 unique_ptr 就没有 is...
为什么 make_unique<T[N]>() 非法,而 make_shared<T[N]>() 合法?
shared_ptr的提案中有这样一段: https://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n3920.html 不幸的是 unique_ptr 失去了对...的支持
C++ std::enable_if 模板类的成员模板函数重载
我正在尝试在类中“重载”模板函数,具体取决于专业化参数的父模板类。但是,我收到以下错误。 错误 C2938:'std::enable_if_t 我正在尝试在类中“重载”模板函数,具体取决于专业化参数的父模板类。但是,我收到以下错误。 错误 C2938:'std::enable_if_t':无法专门化别名模板 这里出了什么问题? #include <memory> #include <type_traits> template <template <typename...> class BaseTemplate, typename Derived, typename TCheck = void> struct test_base_template; template <template <typename...> class BaseTemplate, typename Derived> using is_base_template_of = typename test_base_template<BaseTemplate, Derived>::is_base; //Derive - is a class. Let inherit from Derive, so it can cast to its protected parents template <template <typename...> class BaseTemplate, typename Derived> struct test_base_template<BaseTemplate, Derived, std::enable_if_t<std::is_class_v<Derived>>> : Derived { template<typename...T> static constexpr std::true_type test(BaseTemplate<T...>*); static constexpr std::false_type test(...); using is_base = decltype(test((test_base_template*) nullptr)); }; //Derive - is not a class, so it always false template <template <typename...> class BaseTemplate, typename Derived> struct test_base_template<BaseTemplate, Derived, std::enable_if_t<!std::is_class_v<Derived>>> { using is_base = std::false_type; }; template<typename type> class MyClass { public: template <typename Dummy = type, typename std::enable_if_t<is_base_template_of<std::weak_ptr, type>::value, bool> = bool()> std::shared_ptr<typename type::element_type> get() { return m_data.lock(); } template <typename Dummy = type, typename std::enable_if_t<is_base_template_of<std::shared_ptr, type>::value, bool> = bool()> std::shared_ptr<typename type::element_type> get() { return m_data; } private: type m_data; }; int main() { MyClass<std::weak_ptr<int>> t; auto a1 = t.get(); MyClass<std::shared_ptr<int>> t2; auto a2 = t2.get(); } 阅读了此线程模板类的 std::is_base_of 这是否意味着根据 m_data 类型一次不可能拥有这些功能之一? 您可以使用constexpr if,如下所示: template<typename type> class MyClass { public: std::shared_ptr<typename type::element_type> get() { if constexpr(is_base_template_of<std::weak_ptr, type>::value) { return m_data.lock(); } else if constexpr(is_base_template_of<std::shared_ptr, type>::value) { return m_data; } //make sure that this non-void returning function returns something if control reaches here } }; 工作演示
我正在尝试管理嵌入式设备上的设备。设备由设备管理器管理。它的职责是确保设备的使用寿命并供应鳕鱼的其他部分......