#include <vector>
#include <memory>
#include <stdio.h>
#include <stdlib.h>
typedef unsigned int uint;
struct MyClass {
struct MyMember {
double myElm;
MyMember () : myElm(rand()/(1.0 + RAND_MAX)) {}
};
// std::unique didn't seem to work...
std::shared_ptr<MyMember> mymember;
MyClass () : mymember(new MyMember) {}
};
void generateSomeOfTheObjects (std::vector<MyClass> &objects)
{
for (int i = 0; i < 4; ++i) {
objects.push_back(MyClass());
}
}
void generateObjects(std::vector<MyClass> &objects)
{
objects.clear();
//Fill objects vector
std::vector<MyClass> p;
//This 4-line pattern is repeated a number of times to generate all objects and store them in variable 'objects'
p.clear();
generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
for(uint j = 0; j < p.size(); j++){
objects.push_back(p[j]);
}
p.clear();
generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
for(uint j = 0; j < p.size(); j++){
objects.push_back(p[j]);
}
p.clear();
generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
for(uint j = 0; j < p.size(); j++){
objects.push_back(p[j]);
}
p.clear();
generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
for(uint j = 0; j < p.size(); j++){
objects.push_back(p[j]);
}
//Print some members of the objects - works fine
for(uint i = 0; i < objects.size(); i++){
printf("%f ",objects[i].mymember->myElm);
}
}
int main()
{
std::vector<MyClass> objects;
generateObjects(objects);
//Print size of vector - size is correct it is the same as it is in generateObjects func
printf("%lu\n",objects.size());
//Again print members of the objects - some members are retained after the function call, some are lost. The one below doesn't work, mymember is a pointer to another object and its member myElm seems not initialized.
for(uint i = 0; i < objects.size(); i++){
printf("%f ",objects[i].mymember->myElm);
}
//Here I need to pass the objects to another read-only function
//...
}