C++的STL中关于new的用法,求帮忙!

发布于 2022-09-04 19:18:25 字数 333 浏览 12 评论 0

以下是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()中的()又有什么特别含义吗?希望有人能帮忙解答!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撕心裂肺的伤痛 2022-09-11 19:18:25

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();会被编译器解析成函数声明,而非变量声明。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文