24得票2回答
有没有推荐的方法来测试智能指针是否为空?

我想检查一个 std::shared_ptr 是否为 null。做以下两种方式是否有区别?std::shared_ptr<int> p; if (!p) { // method 1 } if (p == nullptr) { // method 2 }

19得票2回答
为什么编译器抱怨std::thread参数必须在转换为rvalues后可调用?

编译器为什么会抱怨如果将线程函数声明更改为void thr(std::shared_ptr<Base>& p)。编译错误: gcc-10.1.0/include/c++/10.1.0/thread:在' std :: thread :: thread(_Callabl...

22得票1回答
在使用C++14的std::list<shared_ptr>初始化列表时,如果在中间抛出异常,使用GCC编译器会出现内存泄漏问题(但使用Clang编译器不会)。

考虑以下程序:#include &lt;stdexcept&gt; #include &lt;stdio.h&gt; #include &lt;memory&gt; #include &lt;list&gt; class Foo { public: Foo(){ if ...

26得票5回答
unique_ptr和shared_ptr的重载方法在多态性方面存在歧义。

在我的上一个问题获得提示后,我开始编写代码,但是遇到了重载 Scene::addObject 的问题。 为了概括相关部分并使其自包含,尽可能少地提供细节: 我有一组从 Interface 继承的对象层级结构,其中有 Foo 和 Bar; 我有一个拥有这些对象的 Scene; main 中...

14得票1回答
std::unique_ptr<T[]> API 禁止从派生类指针进行向基类指针的转换。

在《现代高效C++》的"Iterm 19: Use std::shared_ptr for shared-ownership resource management."一章中,第133-134页写道: std::shared_ptr支持从派生类指针向基类指针的转换,这对于单个对象是有意义的,...

8得票1回答
FreeRTOS中的共享指针和队列

一个围绕FreeRTOS队列的C++封装可以简化为以下内容: template&lt;typename T&gt; class Queue&lt;T&gt; { public: bool push(const T&amp; item) { retu...

7得票3回答
C++如何断言向量中的所有std::shared_ptr都指向某个对象

当我有一个接收(智能)指针并应该引用某些东西的函数时,我总是按照以下方式开始: class Foo; void doSomething(const std::shared_ptr&lt;Foo&gt;&amp; pFoo) { assert(pFoo); // ... } ...

14得票1回答
自从C++17支持数组的shared_ptr,这是否意味着在构造函数和重置函数中不再需要显式删除器来处理T[]?

在C++14中如果使用单独的分配方式(separated allocation)创建shared_ptr,必须在构造函数和reset成员函数中提供显式的delete函数。using std::string; using std::shared_ptr; using std::default_d...

9得票1回答
使用boost::enable_shared_from_this出现不完整类型错误

在以下这行代码中: class Symbol : public boost::enable_shared_from_this&lt;Symbol&gt; { 我收到了以下错误: error: invalid use of incomplete type struct boost::ena...

7得票2回答
我该如何追踪C++11 lambda中对象的生命周期?

有时候,我们对于捕获对象状态的 lambda 表达式的生命周期一无所知(例如从对象返回它、将其注册为回调函数但无法取消订阅等)。如何确保在调用时 lambda 不会访问已经被销毁的对象? #include &lt;iostream&gt; #include &lt;memory&gt; #i...