单例类的成员变量的生存期是多少?
What is the life time of a singleton class's member variables?
class Member {
public:
Member(int idx) {
this->idx_ = idx;
}
int get_idx() {
return idx_;
}
void set_idx(int idx) {
this->idx_ = idx;
}
void foo();
private:
int idx_;
};
class SingletonClass {
public:
static SingletonClass& GetInstance() {
static SingletonClass inst;
return inst;
}
vector<Member*> get_members() {
return this->members_;
}
Member* get_member(int idx) {
return this->members_[idx];
}
void add_member(Member* mem) {
this->members_.push_back(mem);
}
private:
SingletonClass() {}
vector<Member*> members_;
};
void Member::foo() {
SingletonClass inst = SingletonClass::GetInstance();
cout << inst.get_members().size();
}
int main() {
SingletonClass inst = SingletonClass::GetInstance();
inst.add_member(new Member(0));
inst.add_member(new Member(1));
cout << inst.get_members().size() << endl;
Member* mem = inst.get_member(1);
mem->foo();
return 0;
}
输出为
2
0
似乎当我得到Member::foo()
内部的SingletonClass的实例时,SingletonClass
的成员变量向量members_
被清除…谁能给我解释一下这是怎么发生的?我怎样才能得到预期的结果?非常感谢!
似乎当我在
Member::foo()
中获得SingletonClass
的实例时,SingletonClass
的成员变量向量members_
被清除了…谁能给我解释一下这是怎么发生的?我怎样才能得到预期的结果?
您正在复制下面一行中的对象:
SingletonClass inst = SingletonClass::GetInstance();
,然后修改副本的内容。原对象保持未修改
使用:
SingletonClass& inst = SingletonClass::GetInstance();
要防止这种情况在代码的其他地方发生,请显式删除复制构造函数和复制赋值操作符。
private:
SingletonClass() {}
SingletonClass(SingletonClass const&) = delete;
SingletonClass& operator=(SingletonClass const&) = delete;
vector<Member*> members_;
相关文章:
- 在条件变量中触发错误信号的频率是多少
- 在内存不足之前,我可以声明多少个 const 变量?
- C++中未初始化成员布尔变量的默认值是多少?
- char指针或char变量的默认值是多少
- 使用额外的变量使计算更容易理解 - (多少)我减慢了代码的速度?
- 在 Cpp 标头中声明的常量变量应具有多少个符号条目
- 如果类没有任何成员变量,则通过临时对象调用类的成员函数的开销是多少?
- C++ 100 万个变量名称的最小和最大变量名称长度是多少
- 布尔变量的最佳大小是多少
- 块内变量的生存期是多少
- 方法中声明的静态变量有多少个实例
- 计算变量更改了多少次
- 这段代码创建了多少个变量C的副本
- 最大指针变量中我们可以添加多少颗星
- C++中变量定义运算的值是多少
- 将变量从double改为float会获得多少性能增益
- 我如何看到多少RAM全局变量使用
- 单例类的成员变量的生存期是多少?
- 函数内部声明的静态变量的值是多少
- 控制台应用程序-用户可以为c++中的整数变量输入的最高值是多少