如何使用具有私有复制构造函数的对象创建数组

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 ctormove assignment operator,因为默认实现将被删除,因为您提供了声明的用户 copy ctorcopy 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 ) );
}