5

我们的代码中有一个类,比如 class C。我想创建一个类对象的向量C。但是,复制构造函数和赋值运算符都被特意声明为private. 我不想(也许不允许)改变它。

有没有其他干净的方式来使用/定义vector<C>

4

5 回答 5

9

您可以使用vector<C*>orvector<shared_ptr<C>>代替。

于 2011-05-11T04:06:59.393 回答
2

不,它不是,std::vector需要可分配的概念。C 的作者必须有充分的理由禁止这样做,您必须坚持使用他们提供的任何内容来复制/分配C. 您可以使用上面建议的指针,或者C提供其他机制来复制/分配自身。在后一种情况下,您可以为C.

于 2011-05-11T07:25:44.867 回答
1

您可以访问boost 库吗?

创建一个 boost共享指针向量。

   std::vector<boost:shared_ptr<C>>
于 2011-05-11T04:07:18.923 回答
1

我只用了两个朋友就做到了:

template<typename _Tp, typename _Alloc = std::allocator<_Tp> >
    friend class std::vector;
template<typename _T1, typename _T2>
    friend void std::_Construct(_T1* __p, const _T2& __value);

把它们放在你的类声明中,瞧!

我正在使用 gcc 5.3.1。

于 2016-07-06T00:58:44.767 回答
1

您可以在这里使用移动构造函数

#include<iostream>
#include<vector>

class Road
{
   Road(const Road& obj){}                            //copy constructor
   Road& operator=(const Road& obj){ return *this; }  //copy assignment

   public:
   /*May use below commented code as well
     Road(const Road&)=delete;
     Road& operator=(const Road&)=delete;
   */

   Road()=default;                                    //default constructor
   Road(Road&& obj){}                                 //move constructor
   void display(){ std::cout<<"Object from myvec!\n"; }
};

int main()
{
   std::vector<Road> myVec;
   Road obj;
   myVec.push_back(std::move(obj));

   myVec[0].display();
   return 0;
}
于 2019-08-17T04:15:44.837 回答