fork download
  1. #include <vector>
  2. #include <memory>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. typedef unsigned int uint;
  7.  
  8. struct MyClass {
  9. struct MyMember {
  10. double myElm;
  11. MyMember () : myElm(rand()/(1.0 + RAND_MAX)) {}
  12. };
  13. // std::unique didn't seem to work...
  14. std::shared_ptr<MyMember> mymember;
  15. MyClass () : mymember(new MyMember) {}
  16. };
  17.  
  18. void generateSomeOfTheObjects (std::vector<MyClass> &objects)
  19. {
  20. for (int i = 0; i < 4; ++i) {
  21. objects.push_back(MyClass());
  22. }
  23. }
  24.  
  25. void generateObjects(std::vector<MyClass> &objects)
  26. {
  27. objects.clear();
  28. //Fill objects vector
  29. std::vector<MyClass> p;
  30.  
  31. //This 4-line pattern is repeated a number of times to generate all objects and store them in variable 'objects'
  32. p.clear();
  33. generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
  34. for(uint j = 0; j < p.size(); j++){
  35. objects.push_back(p[j]);
  36. }
  37. p.clear();
  38. generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
  39. for(uint j = 0; j < p.size(); j++){
  40. objects.push_back(p[j]);
  41. }
  42. p.clear();
  43. generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
  44. for(uint j = 0; j < p.size(); j++){
  45. objects.push_back(p[j]);
  46. }
  47. p.clear();
  48. generateSomeOfTheObjects(p); //p is again passed by ref. in/out parameter
  49. for(uint j = 0; j < p.size(); j++){
  50. objects.push_back(p[j]);
  51. }
  52.  
  53. //Print some members of the objects - works fine
  54. for(uint i = 0; i < objects.size(); i++){
  55. printf("%f ",objects[i].mymember->myElm);
  56. }
  57. }
  58.  
  59. int main()
  60. {
  61. std::vector<MyClass> objects;
  62. generateObjects(objects);
  63. //Print size of vector - size is correct it is the same as it is in generateObjects func
  64. printf("%lu\n",objects.size());
  65. //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.
  66. for(uint i = 0; i < objects.size(); i++){
  67. printf("%f ",objects[i].mymember->myElm);
  68. }
  69. //Here I need to pass the objects to another read-only function
  70. //...
  71. }
Success #stdin #stdout 0s 3068KB
stdin
Standard input is empty
stdout
0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970 0.477397 0.628871 0.364784 0.513401 0.952230 0.916195 16
0.840188 0.394383 0.783099 0.798440 0.911647 0.197551 0.335223 0.768230 0.277775 0.553970 0.477397 0.628871 0.364784 0.513401 0.952230 0.916195