C++的STL中关于new的用法,求帮忙!
本文介绍了C++的STL中关于new的用法,求帮忙!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
以下是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(p) T
是placement new。作用是在p指向的存储区上构造对象T。而一般的new会先申请存储区,然后在申请到的存储区上构造对象。
std::string str1;
str1.~basic_string();
std::string *str2 = new(&str1) std::string("abc");
T()
是值初始化,不等同于T
。作用是依据类型T通过默认构造函数初始化对象或0初始化对象。
int *p = new int();
assert(*p==0);
PS:之前犯了个错误,int a();
会被编译器解析成函数声明,而非变量声明。
这篇关于C++的STL中关于new的用法,求帮忙!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文