How to initialize member-struct in initializer list of C++ class?

前端 未结 2 2065
陌清茗
陌清茗 2020-12-12 12:48

I have the following class definitions in c++:

struct Foo {
  int x;
  char array[24];
  short* y;
};

class Bar {
  Bar();

  int x;
  Foo foo;
};
         


        
2条回答
  •  不思量自难忘°
    2020-12-12 13:48

    In standard C++ you need to make a ctor for Foo.

    struct Foo {
    
      Foo(int const a, std::initializer_list const b, short* c)
        : x(a), y(c) {
        assert(b.size() >= 24, "err");
        std::copy(b.begin(), b.begin() + 24, array);
      }
    
      ~Foo() { delete y; }
    
      int x;
      char array[24];
      short* y;
    };
    
    class Bar {
    
      Bar() : x(5), foo(5, {'a', 'b', ..., 'y', 'z'},
        new short(5)) { }
    
      private:
    
      int x;
      Foo foo;
    };
    

    In C++0x you may use uniform initialization list, but still you need dtor for Foo:

    class Bar {
    
      Bar() : x(5), foo{5, new char[24]{'a', 'b', ..., 'y', 'z'},
        new short(5)} { }
      ~Bar() { delete[] foo.array; delete foo.y;}
      }
      private:
    
      int x;
      Foo foo;
    };
    

    To default initialize foo (as Bar() : foo(), x(8) { }) you need to give Foo a default ctor.

提交回复
热议问题