shared-ptr 相关问题

引用计数智能指针类实现共享所有权

使用shared_ptr实现RCU(读-复制-更新)?

我对用户空间RCU(读取-复制-更新)非常感兴趣,并尝试通过tr1::shared_ptr模拟一个,这是代码,虽然我确实是并发编程的新手,但一些专家

回答 2 投票 0

将shared_ptr从另一个函数传递给一个函数

时隔很长一段时间,我又回到了C++,继承了一个代码库,其中一部分具有以下代码的结构。我有两个对象,Wrapped 和 Wrapper,正如所料,Wrap...

回答 1 投票 0

std::unique_ptr 和悬空指针的问题

当我运行此代码时: #包括 #包括 A类{ 民众: 虚拟 std::unique_ptr 克隆() = 0; }; B 类:公共 A { 私人的: 整数b0; 民众: B(缺点...

回答 1 投票 0

错误:返回对临时 [-Werror=return-local-addr] 的引用

我有一些代码看起来像这样 类接口 {}; 包含类; 容器类 { 民众: Container() : m_contained(std::make_shared(*this)) { } 是...

回答 1 投票 0

在创建shared_ptr的副本之前,原始的shared_ptr是否可能超出范围

这可能是一个愚蠢的问题,但我无法回答。 使用下面的代码片段,输出是否有可能打印“Shared Ptr out of range” 我正在尝试的是在共享之前

回答 1 投票 0

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&...

回答 1 投票 0

如何将一个shared_ptr从一个父类转换到另一个父类?

我正在重新设计我的游戏引擎以使用智能指针。我有一个对象类,所有东西都继承自它。我有一个可渲染的 GameObject,因此它继承自 IRenderabl...

回答 2 投票 0

我可以安全地将 boost::shared_array<T> 替换为 std::shared_ptr<T[]> 吗?

我正在开发一个使用 boost::shared_array 的 C++14 代码库。如果我理解正确的话,scoped_array和shared_array是新[]分配的scoped_ptr和shared_ptr的等价物,它们......

回答 1 投票 0

使用 std::shared_ptr 时 C++ 中的段错误

在下面的代码中,使用 std::shared_ptr 时出现分段错误。然而,当使用普通指针时,不会出现同样的问题。 综上所述,我想定义一个 ConstrainedVariable ob...

回答 1 投票 0

尝试用 A* 解决大型迷宫时出现 SIGSEGV

我正在用 C++ 实现 A* 寻路算法来解决迷宫问题,但当迷宫尺寸较大(~10,000x10,000 或更大)时,我遇到了分段错误 (SIGSEGV)。 错误发生在...

回答 2 投票 0

原子<shared_ptr<>>内部如何工作?

原子>内部如何工作?我并不是要求控制块的机制以及存储的数据,这对我来说很容易想象,但对于 ato...

回答 1 投票 0

澄清关于`std::shared_ptr<T>`的一些问题

我有一个类Box,并假设它的重量相当重(例如内存密集型+动态分配的数据)。我有另一个类 BoxWrapper,顾名思义,它本质上是一个包装...

回答 1 投票 0

为什么 std::shared_ptr 从基类和派生类调用析构函数,而 delete 仅从基类调用析构函数? [重复]

为什么当使用 std::shared_ptr 释放时会调用基类和派生类的析构函数,而第二个示例仅调用基类的析构函数? 类基类 { 民众: 〜基础() {...

回答 2 投票 0

C++ Primer 5th Ed - Stanley Lipmann:关于与shared_ptr.reset()结合使用的shared_ptr.unique()的问题

首先我们有一个shared_ptr定义如下: Shared_ptr p(new int(42)); 根据下面的文字: 重置成员经常与独特的一起使用 控制对象的变化

回答 1 投票 0

为连接对象创建shared_ptr时出现Boost-Mysql错误

我有以下代码,其中包含使用shared_ptr的boost::mysql连接。我想在应用程序运行时保留连接对象。我想要申请

回答 1 投票 0

为现有类创建新运算符

我正在 C++ 中使用一个 C 库,该库在其 API 中使用了很多指针。 为了使事情正常工作而不被内存管理烦恼,我广泛使用 std::shared_ptr 和 std::unique_ptr...

回答 1 投票 0

为什么我的简单C++程序会出现shared_ptr段错误?

为什么下面这个简单的C++程序会出现shared_ptr段错误? 是因为块不应该用 std::make_shared(BLOCKSIZE) 初始化吗? 如果我使用 unique_ptr 就没有 is...

回答 1 投票 0

为什么 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 失去了对...的支持

回答 1 投票 0

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 } }; 工作演示

回答 1 投票 0

无需 RTTI C++ 即可转换智能指针

我正在尝试管理嵌入式设备上的设备。设备由设备管理器管理。它的职责是确保设备的使用寿命并供应鳕鱼的其他部分......

回答 1 投票 0

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.