如何使用具有私有复制构造函数的对象创建数组
How to create an array with Object that has private copy constructor
我有一个包含某些成员的结构和一个包含私有复制构造函数的对象,如何创建包含该对象的数组。
例如:
我有一个对象:
class Image
{
...
private:
Image(const Image&);
Image& operator=(const Image&);
u8* pixel;
int width;
int height
}
struct ImageInformation
{
Image image;
int resolution;
}
我想为 ImageInformation : vector 创建一个数组,但这令人生畏
您必须在 Image
class
上定义 move ctor
和 move assignment operator
,因为默认实现将被删除,因为您提供了声明的用户 copy ctor
和 copy assignment operator
.
然后您应该可以毫无问题地使用 vector
。
class Image
{
public:
Image( int height, int width )
: height_{ height }
, width_{ width }
{ }
Image( Image&& ) = default;
Image& operator=( Image&& ) = default;
Image( const Image& ) = delete;
Image& operator=( const Image& ) = delete;
private:
int height_;
int width_;
};
class ImageInformation
{
public:
explicit ImageInformation( Image image )
: image_{ std::move( image ) }
{ }
private:
Image image_;
};
int main( )
{
std::vector<ImageInformation> containers;
Image image{ 10, 10 };
containers.emplace_back( std::move( image ) );
}
我有一个包含某些成员的结构和一个包含私有复制构造函数的对象,如何创建包含该对象的数组。 例如: 我有一个对象:
class Image
{
...
private:
Image(const Image&);
Image& operator=(const Image&);
u8* pixel;
int width;
int height
}
struct ImageInformation
{
Image image;
int resolution;
}
我想为 ImageInformation : vector 创建一个数组,但这令人生畏
您必须在 Image
class
上定义 move ctor
和 move assignment operator
,因为默认实现将被删除,因为您提供了声明的用户 copy ctor
和 copy assignment operator
.
然后您应该可以毫无问题地使用 vector
。
class Image
{
public:
Image( int height, int width )
: height_{ height }
, width_{ width }
{ }
Image( Image&& ) = default;
Image& operator=( Image&& ) = default;
Image( const Image& ) = delete;
Image& operator=( const Image& ) = delete;
private:
int height_;
int width_;
};
class ImageInformation
{
public:
explicit ImageInformation( Image image )
: image_{ std::move( image ) }
{ }
private:
Image image_;
};
int main( )
{
std::vector<ImageInformation> containers;
Image image{ 10, 10 };
containers.emplace_back( std::move( image ) );
}