Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.03 KB | None | 0 0
  1. #include <memory>
  2.  
  3. class Cimpl;
  4.  
  5. class Cpimpl {
  6. std::auto_ptr<Cimpl> impl;
  7. public:
  8. Cpimpl();
  9. };
  10.  
  11. #include "classes.h"
  12. #include <stdio.h>
  13.  
  14. class Cimpl {
  15. public:
  16. Cimpl() {
  17. printf("Cimpl::Cimpl()n");
  18. }
  19. ~Cimpl() {
  20. printf("Cimpl::~Cimpl()n");
  21. }
  22. };
  23.  
  24. Cpimpl::Cpimpl() {
  25. this->impl.reset(new Cimpl);
  26. }
  27.  
  28. #include "classes.h"
  29.  
  30. int main() {
  31. Cpimpl c;
  32. return 0;
  33. }
  34.  
  35. g++ -Wall -c main.cpp
  36. g++ -Wall -c classes.cpp
  37. g++ -Wall main.o classes.o -o app_bug
  38. g++ -Wall classes.o main.o -o app_ok
  39.  
  40. struct Cimpl;
  41.  
  42. struct Cpimpl
  43. {
  44. Cpimpl();
  45. ~Cpimpl();
  46.  
  47. // other public methods here
  48.  
  49. private:
  50. Cimpl *ptr;
  51.  
  52. // Cpimpl must be uncopyable or else make these copy the Cimpl
  53. Cpimpl(const Cpimpl&);
  54. Cpimpl& operator=(const Cpimpl&);
  55. };
  56.  
  57. #include <stdio.h>
  58.  
  59. struct Cimpl
  60. {
  61. Cimpl()
  62. {
  63. puts("Cimpl::Cimpl()");
  64. }
  65. ~Cimpl()
  66. {
  67. puts("Cimpl::~Cimpl()");
  68. }
  69.  
  70. // etc
  71. };
  72.  
  73. Cpimpl::Cpimpl() : ptr(new Cimpl) {}
  74. Cpimpl::~Cpimpl() { delete ptr; }
  75.  
  76. // etc
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement