在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?假设传递给它的所有值都不同并且彼此没有关系。
编辑:Thanx的答案。现在如果我传入boost::shared_ptr<T>
,知道该对象不会被另一个线程同时使用,该怎么办? (不确定是否可以真正保证,或者你可以吗?)
我猜一个原始的ptr传入,如果它被全部使用,需要一些保护吗?
答案 0 :(得分:9)
它们是本地的,除非你声明它们static
- 每次调用函数都有自己的变量副本,你不需要保护它们。
答案 1 :(得分:1)
myint
是somefunc
的本地版本,您无需跨线程保护它。
答案 2 :(得分:1)
你的例子中的myint是一个局部变量,每次somefunc被称为myint lives。但不会超过这个。
myint不需要保护,因为它是一个局部变量
答案 3 :(得分:1)
myint
将真正成为本地人。您不必担心保护它。对于内存中的每个函数调用,将在堆栈上为myint
创建一个单独的空间。
答案 4 :(得分:1)
myint
变量将保持本地,不需要保护它们,因为每个线程都不会共享局部变量。
答案 5 :(得分:1)
静态关键字表示该函数不会传递隐藏的“this” 论点。此函数也无法访问类实例数据。 函数的静态限定符对函数的本地数据没有影响。
static RetType SomeClass::SomeMethod(Type arg)
与自由函数RetType SomeFunc(Type arg)
的问候,
马尔钦