以下是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
PS: 이전에 실수를 했습니다. int a();은 컴파일러에 의해 변수 선언 대신 함수 선언으로 구문 분석됩니다.
int a();
으아악new(p) T
배치가 새로워졌습니다. 함수는 p가 가리키는 저장 영역에 객체 T를 구성하는 것입니다. 일반적으로 new는 저장 영역을 먼저 적용한 후 적용된 저장 영역에 객체를 구성합니다.
으아악T()
은 값 초기화이며T
과 동일하지 않습니다. 함수는 기본 생성자를 통해 객체를 초기화하거나 T 유형에 따라 객체를 0-초기화하는 것입니다.PS: 이전에 실수를 했습니다.
int a();
은 컴파일러에 의해 변수 선언 대신 함수 선언으로 구문 분석됩니다.