Pra*_*tic 4 c++ shared-ptr make-shared c++11
这个链接的问题询问make_shared<>函数和shared_ptr<>构造函数是否不同.
部分答案是,make_shared<>通常会在单个分配中为指向对象和智能指针控制块分配内存.该shared_ptr<>构造函数使用两个分配.
cppreference指出构造函数"必须"这样做,但没有给出任何理由.
为什么是这样?是出于某种原因不可能吗?或者由于其他原因,标准是否禁止它?
cdh*_*wie 15
想想std::shared_ptr构造函数的工作原理:
std::shared_ptr<Foo>(new Foo());
Run Code Online (Sandbox Code Playgroud)
首先new Foo()评估表达式; ::operator new为Foo对象分配内存然后构造它.结果指针作为参数传递给std::shared_ptr构造函数.
看到问题?该Foo分配已经完成!智能指针构造函数无法为同一分配中的控制块和对象分配空间,因为它不负责为对象分配内存.
std::make_shared,在另一方面,是负责两个分配,因此它是可以分配在一个堆分配室两者,然后放置-新构造两者的一个分配内的对象和控制块.
| 归档时间: |
|
| 查看次数: |
972 次 |
| 最近记录: |