【问题标题】:Inheriting from STL containers从 STL 容器继承
【发布时间】:2016-01-08 15:57:32
【问题描述】:

阅读诸如thisthis 之类的 StackOverflow 问答,似乎从 STL 容器继承通常是一个坏主意。我不打算在生产代码中这样做;但是,我想知道它是否会给我一个有效的快速而肮脏的测试。

在我们的代码中,我们大量使用了 STL,并且我们希望测试将内存对齐到 64 字节边界将如何影响我们代码的性能。我打算通过编写一个简单的自定义分配器并拥有一个继承std::vector 的简单类来测试这一点,该类中唯一的变化是默认分配器是我的自定义分配器而不是std::allocator,然后只需编写一个脚本使用sed 并用我的新类替换std::vector 的所有实例。使用这种方法,我将永远不会有任何指向基类的指针(std::vector所有实例已被替换,因此任何指针都将是我的自定义类型),这似乎是从 STL 继承的最大问题。这是一种有效的方法吗?还有其他更简单/更安全的选择吗?这是一个 300 万行代码库,因此手动更改 std::vector 的所有实例以使用自定义分配器至少可以说是一项非常非常耗时的任务。

【问题讨论】:

  • 其实如果想私有地继承STL向量也没问题。
  • @SergeyA:是的,但这不适用于我的情况,因为我还需要 STL 的接口。

标签: c++ stl


【解决方案1】:

如果你有 C++11 支持,而不是继承,你可以做一个模板化 using 语句:

template <class T>
using custom_vector = std::vector<T, custom_allocator<T>>;

然后使用您的脚本将std::vector sed 到custom_vector

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    • 2015-05-21
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多