在每个实例中,使成员函数中的静态变量独立
making static variables in member functions independent for each instance
给定类:
class A {
Public:
void foo() {
static int i;
i++;
}
};
您将如何更改它以防止i
在此示例之后的实例之间更改:
A o1, o2, o3;
o1.foo(); // i = 1
o2.foo(); // i = 1
o3.foo(); // i = 1
o1.foo(); // i = 2
即。在每个实例上分配i
的内存。
编辑:
是的,您可以将i
添加为实例变量,但是如果您需要各种(独立)功能中的这些计数器,该怎么办?我希望仅将变量的范围限制为函数("成员函数")。添加诸如i
,c
,counter
,counter_2
之类的变量的变量似乎很尴尬,如果您需要各种计数器,它是否不是吗?
class A
{
public:
int i = 0;
void foo(){
++i;
}
};
是正常的方式:i
现在是类的成员变量。显然您不想使用static
。
在声明数据成员变得昂贵的情况下(需要经常使用的稀疏成员),实例的固定集合(通常是关联的成员)可能会派上用场。std::map
班级家庭可以用作第一个猜测,对OP的意图一无所知。我们需要在A::foo
中每个访问的对象有一个计数器,但对于未访问的实例,我们不需要一个计数器(即A
未调用A::foo
的实例)。这是我想到的最简单的第一个解决方案:
void A::foo(){
static std::map<A*,std::size_t> i;
++i[this];
//...
};
在不在地图中的对象上拨打std::map::operator[]
时,关联的值是在分配器已经归零的内存位置中构建的默认值(简而Div>
相关文章:
- enable_if转换构造函数(静态强制转换,is_base_of)
- 声明和定义函数静态会产生"undefined reference to function_name()"
- 有没有一种方法可以使全局函数/静态成员函数一次可呼出
- C++ - 模板类 -> 静态函数 -> 静态函数指针的链接错误
- 获取 llvm::函数静态地址
- 成员函数静态变量与成员变量
- 如何将sqlite3+扩展函数静态链接到C/C++应用程序中
- Visual Studio 2015 Natvis如何显示函数静态变量
- 返回一个指向函数静态数据的指针合适吗
- 如何将函数静态应用于非类型模板包的各个元素并对结果求和
- 是否可以通过编程方式创建函数静态对象
- 函数静态变量析构函数和线程
- 函数静态成员变量
- 隐藏模板化的辅助函数——静态成员或未命名的命名空间
- 这个解决方案对MSVC的双重检查锁定错误和函数静态有什么问题?
- 类成员函数静态和私有
- c++函数静态局部,性能好
- 函数静态变量初始化
- 使用基类中的函数静态地调用纯虚函数的派生类实现
- 使成员函数静态会使程序无法编译。想不通为什么