std::shared_ptr C++: How to create for nested struct

60 Views Asked by At
#include <iostream>
#include  <memory>
using namespace std;
struct buffer{
    int buffFilled;     
};
struct verifyStruct{
     int  capacity;  
     int   size;   
     std::shared_ptr<buffer[]> element;
};
int main()
{
  verifyStruct stVerify;
    stVerify.capacity = 10;
    stVerify.size = 10;
    stVerify.element = new buffer[10]; //Throws compilation error.
  return 0;
}

How to fill stVerify.element? Is there anyway to create using make_shared. Please help.

1

There are 1 best solutions below

2
Özgür Murat Sağdıçoğlu On

With C++20, you can initialize a shared_ptr to an array with:

stVerify.element = std::make_shared<buffer[]>(10);

Without C++20, you can use new and custom deleter. Example:

//definition of element in verifyStruct
std::shared_ptr<buffer> element;

// helper function
template<typename T>
inline std::shared_ptr<T> MakeArray(int size)
{
    return std::shared_ptr<T>( new T[size], []( T *p ){ delete [] p; } );
}

// create shared_ptr
stVerify.element = MakeArray<buffer>(10);

// access elements
std::cout << stVerify.element.get()[2].buffFilled << std::endl;