84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
以下是STL源码中的一段:
template <class _T1> inline void _Construct(_T1* __p) { new ((void*) __p) _T1(); }
平时看见的new,是类似这样的用法
_T1 * __p; __p=new _T1;
new ((void*) __p) _T1();和__p=new _T1;等同吗?而_T1()中的()又有什么特别含义吗?希望有人能帮忙解答!
new ((void*) __p) _T1();
__p=new _T1;
new(p) T は新規の配置です。その機能は、p が指す記憶領域上にオブジェクト T を構築することです。通常、new はまずストレージ領域を適用し、次に適用されたストレージ領域上にオブジェクトを構築します。
new(p) T
T() は値の初期化であり、T と同等ではありません。この関数は、デフォルトのコンストラクターを通じてオブジェクトを初期化するか、型 T に従ってオブジェクトを 0 で初期化します。
T()
T
追記: 以前に間違えました。int a(); はコンパイラによって変数宣言ではなく関数宣言に解析されます。
int a();
リーリーnew(p) T
は新規の配置です。その機能は、p が指す記憶領域上にオブジェクト T を構築することです。通常、new はまずストレージ領域を適用し、次に適用されたストレージ領域上にオブジェクトを構築します。
リーリーT()
は値の初期化であり、T
と同等ではありません。この関数は、デフォルトのコンストラクターを通じてオブジェクトを初期化するか、型 T に従ってオブジェクトを 0 で初期化します。追記: 以前に間違えました。
int a();
はコンパイラによって変数宣言ではなく関数宣言に解析されます。