코드가 컴파일되어 예상대로 작동합니다. 구조 (클래스) A
은 std::thread
에서 파생되며 int
으로 확장됩니다. main
코드는 일부 스레드를 생성 한 후 완료 될 때까지 기다립니다.오류 : 삭제 된 함수 'std :: thread :: thread (const std :: thread &)'사용
error: use of deleted function ‘std::thread::thread(const std::thread&)'
을 나는 이유에 아무 생각이 :
문제는 소멸자 주석 (~A(){}
) 때 코드가 구조체 A
에서 소멸자없이 컴파일하는 동안 얻을 것입니다.
게다가 나는 왜 코드가 push_back
과 emplace_back
과 함께 작동하는지 이해하지 못하는 반면, 내가 이해하는 바에 따르면 push_back
과 작동해서는 안됩니다. 당신이 소멸자를 원하는 경우
#include <iostream>
#include <thread>
#include <vector>
struct A : std::thread {
int i;
A(void f(const char*),const char* s,int i_) : std::thread{f,s},i{i_}{
std::cout<<"A created"<<std::endl;
}
//~A(){} // uncomment to see error
};
void dosomething(const char* s){
std::cout<<s<<std::endl;
}
int main(){
std::vector<A> aa;
aa.emplace_back(&dosomething,"hi people",3434);
aa.push_back(A(&dosomething,"hi again people",777));
aa.emplace_back(&dosomething,"hi again people",777);
aa.push_back(A(&dosomething,"hi again people",777));
for(auto& i:aa) i.join();
}
컴파일러 버전 및 옵션은 무엇입니까? 컴파일러 버그 일 수 있습니다. – cdhowie
그것이'push_back'과 함께 작동하는 이유에 관해서는, 당신의 구조체'A'가 move 생성자의 자동 생성에 적합하다고 믿습니다. 그래서'push_back'은 당신이 전달하는 임시적인 것에서 벡터의'A'를 움직일 것입니다 (push_back (value_type &&) 오버로드가 있음을주의하십시오) – cdhowie
-g; -O0; -Wall; -std = C++ 14; -pthread는 g ++와 clang ++을 사용하고 -std = c + +11 – user3723779