gpt4 book ai didi

c++ - 接受非标准可构造和不可分配类型的 vector 的替换

转载 作者:太空狗 更新时间:2023-10-29 21:30:45 25 4
gpt4 key购买 nike

我有一个类test由于某些原因,这不是标准可构造的,也不是可分配的。然而,它是可复制构造的——可能会说它的行为有点像引用。

不幸的是,我需要这些元素的动态数组并意识到 vector<test>不是正确的选择,因为 vector 的元素必须是标准的可构造和可分配的。幸运的是,我通过

解决了这个问题
  • 使用vector<T>::reservevector<T>::push_back而不是 vector<T>::resize直接填写条目(无标准构造)
  • 赋值的 copy'n'swap 技巧以及 vector 的事实通常使用 Pimpl-idiom 实现(不直接分配现有的 test 元素),即

    class base {
    private:
    std::vector<test> vect;
    /* ... */
    public:
    /* ... */
    base& operator= (base y) {
    swap(y);
    return *this;
    }
    void swap(base& y) {
    using std::swap;
    swap(vect, y.vect);
    }
    /* ... */
    };

现在我假设我可能没有考虑到每一点,而且最重要的是,所有这些技巧都强烈依赖于实现。该标准仅保证标准可构造和可分配类型的标准行为。

下一步是什么?如何获得 test 的动态数组对象?

备注:我必须更喜欢标准 C++ 提供的内置解决方案和类。

编辑:我刚刚意识到我的技巧实际上不起作用。如果我定义一个真正*不可分配的类,我的编译器会出现很多错误。所以问题浓缩为最后一个问题:我怎样才能拥有这些 test 的动态数组?对象?

(*) 我的 test类提供了一个赋值运算符,但这个运算符的工作方式类似于对引用的赋值。

最佳答案

编辑:以下不再是好的做法。如果您的对象支持移动,那么它可能适合一个 vector (有关详细信息,请参阅 std::vector elements requirements,尤其是针对 C++17 的更改)。

考虑使用 Boost 的 ptr_vector ,Boost 指针容器库的一部分。请特别参阅该库的 motivation 中的优势#3 .

关于c++ - 接受非标准可构造和不可分配类型的 vector 的替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1913337/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com