我有一些问题,我可以这样简化:这是我的基类代码:
std::string MyBase::get(std::string path) {
static std::string data;
data.clear();
get(path, data);
return data;
}
Get()在基类中定义如下:
virtual int get(std::string path, std::string &data) = 0;
std::string get(std::string path);
基类是一个抽象类,它实现了上面的函数get(std :: string path),并从具体类中调用get(std :: string path,std :: string& data)。函数get(std :: string path,std :: string& data)是抽象类的纯虚函数,在具体类中被覆盖。
现在,这显然不是威胁安全的解决方案。我想编写线程安全函数get(std :: string path),它将调用get(path,data)并返回正确的数据。
答案 0 :(得分:1)
您可以简单地将字符串设为本地,例如
std::string MyBase::get(std::string path) {
std::string data;
get(path, data);
return data;
}
或省略间接和其他get()
并将其设为虚拟:
struct MyBase {
virtual std::string get(const std::string &path) = 0;
};