c++ - std::vector 的复制构造函数使用哪个分配器来分配内存?
问题描述
我有一个自定义分配器模板MyAllocator<T>
。我正在尝试创建一个基本上归结为以下内容的类模板:
template<typename T>
class MyClass<T> {
std::vector<T, MyAllocator<T>> &data;
public:
MyClass(std::vector<T, MyAllocator<T>> &data) : data(data) {}
MyClass(std::vector<T> &data) : data(data) {}
}
我的意图是避免data
在其内存分配由MyAllocator<T>
. 我知道这在某些情况下可能很麻烦,但是这个类是一个短命的实用程序包装器,这是一个性能关键的应用程序。
然而,让我感到困惑的部分是第二个构造函数的成员初始化列表。仔细查看文档后,我似乎无法解释为什么此操作是类型安全的。我的理解是data(data)
寻找构造函数std::vector<T, MyAllocator<T>>::vector(std::vector<T, std::allocator<T>>)
(或传递引用的变体)。这个构造函数似乎不存在,但我没有遇到任何编译时类型错误。
起初我以为是因为data
成员变量是引用,但将其更改为值并没有产生任何类型错误。MyAllocator
不是 的子类std::allocator
,所以我也看不出隐式强制转换如何对这种行为负责。
我错过了什么?如果这确实是合法代码,那么第二个构造函数是否MyAllocator
会像我希望的那样创建一个新的内存分配?
解决方案
推荐阅读
- dns - 如何在 macox 10.15 上自动更新来自上游 dns 服务器的 dnsmasq 条目?
- r - 如何用 `qux[["foo"]][["bar]]` 替换 `qux$foo$bar`?(美元子集到括号子集)
- python - 基于多个日期条件过滤数据框
- mysql - Flutter:如何显示同一张表中的所有列
- firmware - 无法升级 Micro Bit 的固件
- angular - 无法将 undefined 或 null 转换为对象 Angular
- r - 当它实际上是一个因素时,是否有更快的方法来重新编码字符数据?
- notion-api - 使用 Notion-API 写入电子邮件列
- node.js - 如何通过跳转服务器连接到远程 SQL Server 数据库并获取数据
- c - 何时调用 receive_buf