怎么根据条件来声明一个对象 并在条件语句外继续使用

如何根据条件来声明一个对象 并在条件语句外继续使用
比如如下代码

Class A
{
public:
  run();
};
main()
{
  bool b=1;
  
  if(b=1)
  {A a;}

  .........
  .........

  if(b=1)
  {a.run();}
}

我根据b的值决定是否创建类A的对象a,并在执行了一些其他函数之后,再次根据b的值决定是否执行函数run(),但是对象a是个局部变量,第二次是无法使用它的
我的问题是有什么方法可否让a的作用域扩大到整个main函数
或者有什么其他的方法能达到我的预期效果,就是根据某个条件来创建对象,并在条件结构外继续使用这个对象

------解决方案--------------------
用全局变量或者是专门定义一个对象管理器。
------解决方案--------------------
指针就行。

main()
{
  bool b=1;

  A* pa = 0;   
  if(b=1)
  {pa = new A;}
 
  .........
  .........
 
  if(b=1 && pa)
  {pa->run();}

  delete pa;
}

其实最好是把 b==1 的逻辑合为一处,都放在一个块儿里面。程序干净利落,逻辑也清晰。
------解决方案--------------------
 if(b=1)

Is an an assign operation, it always return true. You meant to do:

 if(b==1)

------解决方案--------------------
扩大 范围就可以了

全局变量 或者堆栈!
------解决方案--------------------
如果lz是不想因为A的空间问题这么做的话,可以定义一个A的指针比如A*p初始化为NULL,如果进入条件后,可以动态new一个,然后让这个指针指向开辟的地址 p =new A,下边可以直接判断这个指针是否为非NULL来确定是否执行p->run();
------解决方案--------------------
{A a;}

在这个块结束后 a的生命周期结束

A *a;
if(b==1)
  { a = new A;}
------解决方案--------------------
Class A
{
public:
  run();
};
main()
{
  bool b=1;
  
  A* a = NULL; 
  if(b=1)
  {a = new A();}
 
  .........
  .........
 
  if(b=1)
  {a.run();}
}


这样就OK拉
------解决方案--------------------
Class A
{
public:
  run();
};
main()
{
  bool b=1;
   
  A* a = NULL; 
  if(b=1)
  {a = new A();}
  
  .........
  .........
  
  if(b=1)
  {a->run();}
  delete a;
  a = NULL
}

上面一个忘记释放了。我的错
------解决方案--------------------
用编译宏

#define USING_A

#ifdef USING_A
Class A
{
public:
  run();
};
#endif // #ifdef USING_A

main()
{
#ifdef USING_A
  A a;
#endif
  .........
#ifdef USING_A
  a.run();
#endif
}
------解决方案--------------------
用容器

main()
{
  bool b=1;