C++具有私有复制构造函数的类的 stl 向量
C++ stl vector for classes with private copy constructor?
我们的代码中有一个类,比如类C
。我想创建一个类 C
对象的向量。但是,复制构造函数和赋值运算符都被特意声明为private
。我不想(也许不允许)改变这一点。
有没有其他干净的方法来使用/定义vector<C>
?
您可以使用vector<C*>
或vector<shared_ptr<C>>
。
不,不是,std::vector
需要可分配的概念。C 的作者一定有充分的理由禁止这样做,你必须坚持他们提供的任何内容来复制/分配C
实例。要么使用上面建议的指针,要么C
提供其他机制来复制/分配自身。在后一种情况下,您可以为 C
编写可分配的代理类型。
您是否可以访问提升库?
创建提升共享指针的向量。
std::vector<boost:shared_ptr<C>>
我只用了两个朋友就设法做到了:
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。
你可以在这里使用移动构造函数。
#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;
}
相关文章:
- 具有 STL 向量类型成员的类的复制内存
- STL 向量无缘无故损坏,VC++ 2017
- 如何避免自定义 STL 向量类的智能指针 delete[] 异常?
- STL向量上出现奇怪的复制构造函数错误
- OpenMP 和不同的 STL 向量
- C++ STL 向量保留太多容量会消耗大量内存吗?
- 使用 boost Spirit 解析为 STL 向量
- C++ 在列表末尾插入元素的列表的 STL 向量
- C++ 使用数组初始化时的 STL 向量内存管理
- 仅编写 c++ stl 向量的第一个元素的正确方法
- 如何在<typename> <long> 不更改给定代码的情况下将自定义向量与 STL 向量相互转换?
- 限制指针访问STL ::向量元素
- 传递包裹在shared_ptr中的 STL 向量
- 如何将结构指针插入stl向量中并显示内容
- 将一个STL向量有效地分配给另一个STL矢量(WSL问题)
- erase() 不适用于结构/对象内的 STL 向量
- STL向量具有反向和pop/push_back成本
- 获取 STL 向量C++的地址
- Unique_ptr的 STL 向量 - 如何重置
- 带有 STL 向量的模板函数会因新的分配器而中断