代碼如下,存在一個int到Test的隱士型別轉換。我看有些地方說,這種隱士型別轉換可能出現問題。但我的分析是,經過測驗,隱士型別轉換發生在子執行緒中的,只要保證傳入的int值是有效的,就不會出現問題,而int是以值傳遞拷貝到執行緒空間中的,肯定是有效的,而隱士型別轉換也是在子執行緒空間中的。對于由問題的是比如指標到std::string的隱士型別轉換。因為這種情況下,主執行緒結束,指標會失效。但對于比如一般型別來說,就不存在這種問題了。
class Test
{
public:
Test(int)
{
std::cout << "Test :" << std::this_thread::get_id() << std::endl;
}
};
void print(const Test &t)
{
std::cout << "Print :" << std::this_thread::get_id() << std::endl;
}
int main(int argc, char *argv[])
{
std::thread t(print, 1);
t.detach();
return 0;
}
uj5u.com熱心網友回復:
const T& 會自動延長臨時變數的生存周期。uj5u.com熱心網友回復:
我咋覺得隱式轉換是在主執行緒呢。跟指標本身沒關系,指標本身也是傳值。跟指標指向的物件的生命周期有關系。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/278990.html
標籤:C++ 語言
上一篇:C++ 指標 動態記憶體分配
