0

我有一个具有一些成员的结构和一个具有私有复制构造函数的对象,我如何创建一个包含该对象的数组。例如:我有一个对象:

class Image
{
   ...
   private:
      Image(const Image&);
      Image& operator=(const Image&);
      u8* pixel;
      int width;
      int height
}

struct ImageInformation
{
   Image image;
   int resolution;
}

我想为 ImageInformation 创建一个数组:vector 但这是禁止的

4

1 回答 1

1

您必须定义move ctorand move assignment operatorImage class因为默认实现将被删除,因为您提供了用户声明的copy ctorand 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 ) );
}
于 2021-03-05T02:18:49.930 回答