C++ C++;初始化基于类的全局变量

C++ C++;初始化基于类的全局变量,c++,C++,我试图定义几个全局变量,这些变量应该可以用于所有函数,但希望从主程序初始化。谁能帮我学语法吗?请注意,还有一些C++类的初学者,因为我需要多次运行这个程序的相同副本,并且不希望在这个程序的多个实例中有相同的共享类——需要确保我在主体中创建一个新类。我还想提到-printvars-是一个预构建的函数,我无法控制向它传递任何指针变量,只是我只能在该函数中使用全局变量 class gvars { public: int x=0; int y=0; gvars() {} ~

我试图定义几个全局变量,这些变量应该可以用于所有函数,但希望从主程序初始化。谁能帮我学语法吗?请注意,还有一些C++类的初学者,因为我需要多次运行这个程序的相同副本,并且不希望在这个程序的多个实例中有相同的共享类——需要确保我在主体中创建一个新类。我还想提到-printvars-是一个预构建的函数,我无法控制向它传递任何指针变量,只是我只能在该函数中使用全局变量

class gvars
{
   public:
   int x=0;
   int y=0;
   gvars() {}
   ~gvars() {}
};

std::unique_ptr<gvars> *g=NULL;  // Must be a pointer to class

//I can't pass any parameters to this function
//Only have control over the body of the program to access global vars
void printvars()
{
   std::cout << (*g).x << " " << (*g).y << std::endl;
}

int main()
{

  if (g==NULL)
  {
     g=new gvars();  // This is critical  - create a new class here only
  }

  (*g).x=10;
  (*g).y=20;

  printvars();  // Expected output :  10   20

  delete g;

  return 0;
}
类GVAR
{
公众:
int x=0;
int y=0;
gvars(){}
~gvars(){}
};
std::unique_ptr*g=NULL;//必须是指向类的指针
//我无法将任何参数传递到此函数
//只有控制程序主体才能访问全局VAR
void printvars()
{

std::cout代码很好,除了行。 尝试改变

std::unique_ptr<gvars> *g=NULL;  // Must be a pointer to class

程序将在每次运行时创建/删除类的新实例。另外,
printvars
应该可以正常工作。

您已经在使用
std::unique\u ptr
,为什么需要指向它的指针,为什么不使用
nullptr
?正如@chris提到的,您可能想要更改为
std::unique\u ptr g=std::nullptr;
@chris C++11还没有完全理解masses@marc不,就像关键字
std::unique_ptr g=nullptr;
一样,我甚至不明白为什么需要任何类型的指针。只需声明一个全局变量:
gvars g;
它将在main开始之前构造,在main返回之后销毁。Nikolay-感谢您的更正。关于elated-是否“删除g”在主程序中是否合适?@ejuser是的,这是一种很好的样式-删除程序分配的内存。虽然g对象将在程序退出时被销毁并隐式释放。因此,如果不使用
delete g;
语句,程序仍然是正确的,但valgrind等代码分析工具可能会警告您可能存在内存泄漏。
gvars*g=NULL;