10

在 C++ 中,当您在静态成员函数中有局部变量时,这是否意味着这些局部变量也是隐式静态的,或者它们真的是局部的?

例子:

static void myClass::somefunc(int someint)
{

int myint = someint;  // is myint really a local variable or does it change due to the static qualifier at function level?


}

此外,运行此函数的线程池中的不同线程,myint 是否需要被锁保护?假设传递给它的所有值都是不同的并且彼此没有关系。

编辑:谢谢你的答案。现在如果我传入 a boost::shared_ptr<T>,知道这个对象不会被另一个线程同时使用怎么办?(不确定是否真的可以保证,或者你可以吗?)

我想传入的原始 ptr 需要一些保护,如果它被全部使用?

4

6 回答 6

10

除非您声明它们,否则它们是本地static的 - 函数的每次调用都将拥有自己的变量副本,您不需要保护它们。

于 2010-12-22T13:57:50.257 回答
1

myint是本地的somefunc,您不需要跨线程保护它。

于 2010-12-22T13:57:41.207 回答
1

你的例子中的 myint 是一个局部变量,每次 somefunc 被称为 myint 生活。但仅此而已。

myint 不需要保护,因为它是一个局部变量

于 2010-12-22T13:58:11.590 回答
1

myint将真正是本地的。您不必担心保护它。myint将为内存中的每个函数调用在堆栈上创建一个单独的空间。

于 2010-12-22T13:58:18.463 回答
1

变量将保持在myint本地,无需保护它们,因为每个线程不会共享局部变量。

于 2010-12-22T14:04:02.063 回答
1

static 关键字意味着函数不会被传递一个隐藏的“this”参数。此外,该函数将无法访问类实例数据。函数的静态限定符,对函数的本地数据没有影响。

static RetType SomeClass::SomeMethod(Type arg)自由函数具有相同的“类型”RetType SomeFunc(Type arg)

问候,
马辛

于 2010-12-22T14:07:12.390 回答