小编mua*_*uaz的帖子

将shared_ptr与singleton一起使用有什么好处

这里有两个单例,为什么第一个更可取,因为两者都只会实例化相应类的一个实例:

第一的:

class SharedPointerSingleton  {
public:
      static std::shared_ptr< SharedPointerSingleton> getSingleton(
   {
      if( s_pSingleton== 0 ) s_pSingleton = std::shared_ptr< SharedPointerSingleton>(new SharedPointerSingleton());
      return s_pSingleton;
   }


private:
   SharedPointerSingleton(){};
   static std::shared_ptr< SharedPointerSingleton> s_pSingleton;
};
Run Code Online (Sandbox Code Playgroud)

第二:

class PointerSingleton  {
public:
      static  PointerSingleton * getSingleton(
   {
      if( pSingleton== 0 )  pSingleton =  new PointerSingleton ());
      return  pSingleton;
   }


private:
   PointerSingleton (){};
   static  PointerSingleton *  pSingleton;
};
Run Code Online (Sandbox Code Playgroud)

c++ singleton shared-ptr

2
推荐指数
1
解决办法
5460
查看次数

std::move 是否会使堆栈碎片化,或者在将对象移动到调用者后堆栈是否重新排列?

我已经阅读了几个答案和许多有关移动语义的文章,因此它只是对右值引用的静态转换,这个问题是关于它对堆栈的影响,那么移动后堆栈是否会留下碎片?还是以某种方式重新排列?因为堆栈移动的对象不受堆栈展开的影响。以下代码片段运行良好:

#include <memory>
#include <cassert>

struct A {
    int x = 0;
};

struct B {
    A a;
};

void SetB(B& b) {
    A a1{6}; //pushing into the stack.
    A a2{7}; //pushing into the stack.
    b.a = std::move(a2);
}

int main()
{
    B b;
    SetB(b);
    assert( b.a.x == 7);
}
Run Code Online (Sandbox Code Playgroud)

a2是在SetB堆栈帧中定义的,但在SetB完成并且控件返回到后仍然可用main。然而; a1不是尽管它更接近main堆栈帧吗?

c++ move stack-unwinding c++11

1
推荐指数
1
解决办法
261
查看次数

标签 统计

c++ ×2

c++11 ×1

move ×1

shared-ptr ×1

singleton ×1

stack-unwinding ×1