shared-ptr 相关问题

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

为什么我的简单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

在 Visual Studio 中使用 std::make_shared 时出现错误 C2440

我可能在这里犯了一些基本错误,但谷歌没有发现任何结果。我使用的是 Visual Studio 2019,我的代码如下: #包括 int main() { std::shared_...

回答 1 投票 0

鉴于shared_ptr包含抽象类,如何克隆shared_ptr值?

这是大学的一个项目,我必须做一个“油漆”,现在我陷入了复制和粘贴的状态。 shape 是一个抽象类,其他真实形状如 Rectangle 和 Ci...

回答 1 投票 0

Future 不返回对 C++ 中值的引用

我刚刚开始学习 C++ 多线程并遵循这个优秀的教程。 但是,当我打印 Future 返回的字符串的内存地址时,我得到了不同的地址......

回答 1 投票 0

按值传递共享指针使得在 mac 上计数为 0,在 win 上计数为 1

我看到共享指针按值传递在 Mac 上计数为 0,但在我的代码中在 Windows 上仍为 1。 所以我一直在尝试理解共享指针按值传递和按引用传递

回答 1 投票 0

weak_ptr 如何防止循环引用?

我正在阅读 Scott Meyers 的《Effective C++》一书。有人提到,有 tr1::shared_ptr 和 tr1::weak_ptr 的作用类似于内置指针,但它们跟踪有多少个 tr1::shared_ptr 指向...

回答 5 投票 0

boost、共享 ptr 与弱 ptr?什么时候使用哪个? [重复]

在我当前的项目中,我非常广泛地使用 boost::shared_ptr 。 最近我的队友也开始使用weak_ptr。我不知道该使用哪一个以及何时使用。 除此之外还有什么

回答 4 投票 0

LLDB:在 std::shared_ptr<T> 析构函数上设置断点

如何在 lldb 中的析构函数 ~shared_ptr 上设置符号断点? 上下文:我们想打破这一点,检查演示程序中简单实现的前向链表的堆栈溢出...

回答 1 投票 0

如何防止共享指针的unordered_map泄漏?

我正在构建一个控制台应用程序,其中仅使用智能指针。我选择只使用智能指针来了解何时使用哪个智能指针。在此应用程序中,我正在尝试...

回答 1 投票 0

boost::shared_ptr boost::互斥体和复制构造函数

我需要保护对类中数据结构的访问。由于我不能拥有互斥体(因为我无法复制它),我正在考虑拥有shared_ptr 并将互斥体保留在那里。这是我的示例代码

回答 3 投票 0

关于正确关闭 Boost Beast 服务器的说明

我正在使用 Boost Beast 高级服务器示例(可从 Boost.org 获取),并将其用作我自己的服务器的基础。我的理解是,在这个例子中,session 和 li...

回答 1 投票 0

C++11 unordered_set 与 std::owner_less 类似散列

我正在使用外部网络库,它返回一些代表打开的套接字的神奇结构,并且文档说,当将它们插入到 STL 容器中时,应该使用 std::

回答 3 投票 0

如何在 C++ 中转换我的自定义共享指针

我正在用 C++ 创建一个自定义共享指针来了解这些东西是如何工作的。 我的实现不是通用目的,我只希望它与 Foo 类或其任何子类一起使用。 这我...

回答 1 投票 0

C++来自*this、父类和派生类的shared_ptr

我需要从中获取一个shared_ptr,这对于父类来说很容易。但是当你开始从这个类中派生时,问题就变得更加困难了。 你会得到这个错误: 成员“shared_from_this”...

回答 1 投票 0

如何在C++17中获取shared_ptr的原始指针?

我正在使用 C 库,并且希望将对象指针隐藏到共享指针。假设 C 库有... T* 创建对象(); 无效 DoStuff(T*); 无效销毁对象(T*); 那我可以做... 标准::

回答 1 投票 0

如何打印shared_ptr类?

如何打印shared_ptr?我必须通过“void print”打印 sp1 和 sp2,但我不知道该怎么做。这是代码 结构媒体资产 { 虚拟〜MediaAsset()=默认; // 妈...

回答 1 投票 0

boost asio 日期时间服务器示例和使用 std::async 不起作用

我正在尝试学习boost asio(boost 1.84,C ++ 20,Ubuntu 23.04),并对以下日间服务器示例进行了一些修改:https://www.boost.org/doc/libs/1_84_0 /doc/html/boost_asio/

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.