class log_String {
//These are private!
std::vector<std::string> list;
std::mutex m;
log_String& operator=(const log_String &source); //Operatore assegnazione
log_String(const log_String &source);
public:
log_String() {}; // <---- is this thread_safe?
void add(std::string string) {
std::lock_guard<std::mutex> l(m);
list.push_back(string);
}
void printFile(std::string file) {
std::lock_guard<std::mutex> l(m);
std::ofstream myfile;
myfile.open(file);
for (auto iterator = list.begin(); iterator != list.end(); ++iterator) {
myfile << *iterator << "\n";
}
}
};
log_String() {}
нить-сейф? Я думаю, что даже если многие потоки звонят одновременно log_String() {}
, это не должно быть проблемой? Неужели я ошибаюсь? Если я ошибаюсь, возможно, это решение может определить его private
и защитить экземпляр нового объекта, приобретающего новый замок?Является ли по умолчанию конструктором потокобезопасным в C++?
Этот вопрос не имеет смысла. Конструктор запускает * до *, время жизни объекта начинается. Как можно получить доступ к объекту *, который не существует, несколькими потоками одновременно? –
@KerrekSB Ваш комментарий должен был быть ответом! В качестве примечания: я задал вопрос о том, как начинается срок жизни объекта (http://stackoverflow.com/questions/20409500/what-does-the-c-standard-mean-regarding-object-lifetime-begins) и получили интересные ответы. Что означает «инициализация завершена» в стандартном значении? :) – mantler
@GeorgeAl: Что? Как? Когда? –