我有以下代码:
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)
看起来更糟糕,但没关系,这是我无法用它做任何事情的情况。
谢谢。
答案 0 :(得分:12)
您的变量需要名称:
static std::vector<int> my_static_vector(3);
答案 1 :(得分:7)
你忘了给矢量一个名字,所以没有任何变量指向它,它会在创建后立即被销毁
答案 2 :(得分:4)
因为std::vector<int>(3)
创建了一个未命名的临时文件,它只存在于其包含的表达式的末尾。调试器不能在与构造相同的行中显示破坏,因此它在下一行显示它。
为项目命名,并应用正常的static
语义。