代码之家  ›  专栏  ›  技术社区  ›  Eamon Nerbonne

具有值语义的C++数组,没有分配器?

  •  3
  • Eamon Nerbonne  · 技术社区  · 15 年前

    我想要一个通过new[](无自定义分配器)动态分配的数组,该数组包含在具有有意义的复制构造函数的类型中。

    boost::scoped_数组没有复制构造函数,这意味着我需要使用std::copy(我以前的复制粘贴密集型解决方案)为每个类手动添加一个。这也容易出错,因为在添加字段时,最好确保在自定义副本构造函数中添加了正确的初始值设定项;i、 e.一大堆样板。

    vector使用一些预分配系统,因此不使用运算符new[]。这是有问题的,因为它需要自定义分配器,更糟糕的是,这还不够,因为存在一些奇怪的情况(我不完全理解),其中按值返回语义会导致问题;我不想让容器做任何花哨的事情,只是简单地包含一个新的[]'d数组,并将其复制到它的复制构造函数中——最好将所有常见的可疑对象重载,以便作为一个集合使用。

    基本上,我正在寻找一个具有值语义的bog标准动态分配数组。

    2 回复  |  直到 15 年前
        1
  •  1
  •   Neil Gall    15 年前

    听起来写起来并不难。类似的东西?

    template <typename T> my_array {
        T* m_ptr;
        size_t m_size;
    public:
        my_array(size_t sz)
            : m_ptr(new T[sz])
            , m_size(sz)
        {}
        my_array(const my_array &other)
            : m_ptr(new T[other.m_size])
            , m_size(other.m_size)
        {
            std::copy(other.m_ptr, other.m_ptr + other.m_size, m_ptr);
        }
        ~my_array() {
            delete[] m_ptr;
        }
    
        // ... operator[], etc.
    };
    

    通常的免责声明-这是我的头,还没有编译或任何东西。

        2
  •  1
  •   Matt Joiner    15 年前

    私自继承 std::vector resize() ,或许还可以加上 setsize() bool

    您的复制构造函数可以调用 向量 复制构造函数,并自动设置标志以防止进一步更改。