mercredi 15 janvier 2020

Is it okay to memset a struct which has an another struct with Smart pointer member?

Following codeblock is compiling and running okay.

Qeus-1. Is it safe to memset a struct which contains another stuct with smart pointer as a member variable? (like the example code below) Ques-2. Is it safe to memset a struct which contains smart pointer members?

Following code structure is part of a legacy project where this hierarchical structures have hundreds of other members (POD or non POD memebers)

#include <iostream>
#include <map>
#include <string>
#include <string.h>
#include <stdlib.h>
#include <memory>


typedef struct _Globals{
  std::shared_ptr<std::map<int, std::string> > rollNamePair;
} _Globals;

struct _Class {
  struct _Globals Globals;  // global vars
};

struct _School {
  struct _Class *pSchool;
};

int main()
{
  struct _School abc;
  memset(&abc, 0, sizeof(struct _School));
  abc.pSchool= (struct _Class*) malloc(sizeof(struct _Class));
  abc.pSchool->Globals.rollNamePair= std::make_shared<std::map<int, std::string> >();
  (*abc.pSchool->Globals.rollNamePair)[1]= "John";
  (*abc.pSchool->Globals.rollNamePair)[2]= "Paul";

  std::cout << (*abc.pSchool->Globals.rollNamePair)[1] << "\n";
  std::cout << (*abc.pSchool->Globals.rollNamePair)[2];

  return 0;
}

Aucun commentaire:

Enregistrer un commentaire