まず、一時的なオブジェクトは、パラメータとして渡されたスレッド
各スレッドは彼に数を与えるために、異なる番号が異なるタスクを実行します。
1、1つのトラップ
1の#include <iostreamの> 2の#include <スレッド> // 线程 3 使用して 名前空間STDを、 4 5 ボイド PRT(CONSTはint&I、チャー *のBUF){ 6 COUT << I << ENDL。 7 COUT << << BUF ENDL。 8 } 9 INT メイン(){ 10 INT&A = 1 。 11 INT&B = 。 12 チャー mybufは[] = 「これはテストです」。 13 このmyobjスレッド(PRT、A、mybuf); // 最初のパラメータは関数スレッドの名前で、次のパラメータは、スレッドの関数である 14 )myobj.detach(; 15 COUT << " 主要エンド" << ENDL; 16 リターン 0 ; 17 }
そこスレッド関数のコード上では、変数iへの参照です。コードの12行に子スレッドを作成します。引数は、それが引用渡されたので、私は最初、同じ一つのアドレスでなければなりませんスレッド関数れます。
メインスレッドが完成し実行する場合は、それがリリース、私は子スレッドを訪れるその時だった、とするかどうか間違っていることが?
答えは、子スレッドがiの参照ですが、実際には、スレッドが作成されて作成されたが、参照は本当にここには適用されていない、、、ノースレッドこのmyobjにコピーされますが、コピーではなく、参照しますそれは動作します。だから私はまだ私が別のアドレスに、私へのコピーのコピーので、キルトのスレッドにアクセスすることができます。
しかしmybuf文字列のために、それは安全ではありません。bufがポインタであるので、コンテンツはポインタメモリアドレスである、それがコピーされている場合でも、それは実行のメインスレッドが終わったときにのみ、再びコピーされた内容のメモリアドレスを指し、メモリのアドレスがリリースされている、間違っているとアクセスできません!
どのようにその文字列を渡す方法は????ルックトラップII
2、トラップ2
図3に示すように、スレッドID
4、逮捕一時的なオブジェクト構築のタイミング
スレッドスマートポインタパラメータとして第三に、転送クラスオブジェクト
第四に、メンバ関数ポインタパラメータは、スレッドを行います