给定班级:
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
到类,如果你需要不同的柜台,岂不?
在声明数据成员变得昂贵的情况下(不需要经常使用的稀疏成员),实例独立集合(通常是关联的集合)可能会派上用场。对OP的意图一无所知,std::map
可以将类家族用作第一个推测。我们需要为中的每个访问对象提供一个计数器A::foo
,但对于未访问的实例(即,A
实例未调用A::foo
)则不需要。这是我想到的最简单的第一个解决方案:
void A::foo(){
static std::map<A*,std::size_t> i;
++i[this];
//...
};
在调用std::map::operator[]
未在映射中的对象时,默认情况下,关联值在已由分配器清零的内存位置中构造(简而言之,第一次计时器会自动初始化为0)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句