0

我有以下代码:

void Foo() {

   static std::vector<int>(3);

   // Vector object is constructed every function call

   // The destructor of the static vector is invoked at
   // this point (the debugger shows so)
   // <-------------------

   int a;
}

然后在某个地方我按顺序调用Foo了几次

为什么每次Foo()调用都会构造向量对象,为什么在声明后立即调用析构函数static ...


更新:

我试图在调用机制后实现函数,我认为编写类似的东西

static core::CallOnce(parameters)哪里CallOnce是一个类名会很好。

在我看来,写作static core::CallOnce call_once(parameters)看起来更糟,但是好吧,在这种情况下我无能为力。

谢谢你。

4

3 回答 3

12

您的变量需要一个名称:

static std::vector<int> my_static_vector(3);
于 2010-08-01T03:59:55.087 回答
7

你忘了给向量一个名字,所以没有任何变量指向它,它在创建后立即被销毁

于 2010-08-01T04:00:26.213 回答
4

因为std::vector<int>(3)创建了一个未命名的临时,它只存在于它所包含的表达式的末尾。调试器不能在构造的同一行显示破坏,所以它显示在下一行。

给项目一个名称,正常的static语义将适用。

于 2010-08-01T04:01:12.107 回答