sum*_*ang 0 c++ visual-c++ c++11
我有一个类,我想要一个向量在程序的整个生命中都活着,所以我正在使用静态向量。
请查看我的代码,并告诉我它们是否是使用静态变量的更好方法。
static std::vector<std::string> Stack;
class Test
{
public:
void AddStack(std::string str)
void PopStack()
};
void Test::AddStack(std::string str)
{
Stack.insert(Stack.end(),str.begin(),str.end());
}
void Test::PopStack()
{
if(!Stack.empty() )
{
Stack.pop_back();
}
}
Run Code Online (Sandbox Code Playgroud)
选项1
由于Stack仅用于实现成员函数Test,所以使a private和static类的成员变量成为可能。
class Test
{
public:
void AddStack(std::string str);
void PopStack();
private:
static std::vector<std::string> Stack;
};
Run Code Online (Sandbox Code Playgroud)
在.cpp文件中,添加:
std::vector<std::string> Test::Stack;
Run Code Online (Sandbox Code Playgroud)
选项2
请Stack提供给的成员函数Test通过函数调用,而不是一个变量。
class Test
{
public:
void AddStack(std::string str);
void PopStack();
private:
static std::vector<std::string>& getStack();
};
Run Code Online (Sandbox Code Playgroud)
实现方式:
std::vector<std::string>& getStack()
{
static std::vector<std::string> Stack;
return Stack;
}
void Test::AddStack(std::string str)
{
auto& Stack = getStack();
Stack.insert(Stack.end(),str.begin(),str.end());
}
void Test::PopStack()
{
auto& Stack = getStack();
if(!Stack.empty() )
{
Stack.pop_back();
}
}
Run Code Online (Sandbox Code Playgroud)
选项3
做Test一个单身,使Stack非static类的成员。
class Test
{
public:
static Test& instance();
void AddStack(std::string str);
void PopStack();
private:
std::vector<std::string> Stack;
};
Run Code Online (Sandbox Code Playgroud)
实现方式:
Test& Test::instance()
{
static Test theInstance;
return theInstance;
}
void Test::AddStack(std::string str)
{
Stack.insert(Stack.end(),str.begin(),str.end());
}
void Test::PopStack()
{
if(!Stack.empty() )
{
Stack.pop_back();
}
}
Run Code Online (Sandbox Code Playgroud)
并将其用作:
Test::instance().AddStack("abcd");
Test::instance().PopStack();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |