c++11 - 如何使用 make_shared 创建相同类型的对象数组?
问题描述
与使用“new”相比,我们可以使用“make_shared”更快、更安全地创建对象。例如,
shared_ptr<Dog> p = make_shared<Dog>("Luther").
如果我需要创建一个对象数组(例如 Dog[3]),是否可以使用“make_shared”而不是“new”?此外,是否可以通过 make_shared 方法使用自定义删除功能?
解决方案
auto parr = make_shared<std::array<Dog, 3>>(std::array<Dog, 3>{"Bob", "Charlie", "Alice"});
如果你想要一个指向第 n 个元素的共享指针......
auto pelem = std::shared_ptr<Dog*>{p, p->data()+n};
它执行 0 次分配。
推荐阅读
- c# - 从 proto 文件创建 REST 控制器和类
- asp.net - 找不到路径的一部分 - nuget 还原失败
- angular - Angular 8 - 导航到相同的路由路径时处理路由订阅
- javascript - 在 vuejs 中访问组件的根 DOM 元素
- git - 致命:无法访问“https://github.com/BookShell527/BookShell527.github.io.git/”:错误设置证书验证位置:
- python - 没有为 Selenium 测试加载 Javascript
- java - java.lang.ClassNotFoundException: javax.validation.Validator
- javascript - 第二个 AJAX 调用中的函数发生在第一个 AJAX 调用之前
- python - 为什么我们在 OpenCV 中将 laplacian 转换为 uint8?
- python - 为什么 np.load 在没有 allow_pickle=True 的情况下无法加载使用 np.save() 保存的文件