fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <iterator>
  4.  
  5.  
  6. size_t st;
  7. struct A{
  8. char* arr;
  9. A() {
  10. printf("+A() [%+03lld]\n",(size_t)this-st);
  11. arr=new char[1024*1024];
  12. for (int i=0;i<1024*1024;i++)
  13. arr[i]=i;
  14. }
  15. ~A() {
  16. printf("~A() [%+03lld]\n",(size_t)this-st);
  17. if (arr)
  18. delete[] arr;
  19. arr=nullptr;
  20. }
  21. void operator=(A&& r){
  22. printf("=A(&&) [%+03lld] = [%+03lld]\n",(size_t)this-st,(size_t)&r-st);
  23. if (arr)
  24. delete[] arr;
  25. arr=r.arr;
  26. r.arr=nullptr;
  27. }
  28. void operator=(A& r){
  29. printf("=A(&) [%+03lld] = [%+03lld]\n",(size_t)this-st,(size_t)&r-st);
  30. if (arr)
  31. delete[] arr;
  32. arr=new char[1024*1024];
  33. for (int i=0;i<1024*1024;i++)
  34. arr[i]=r.arr[i];
  35. }
  36. A(A&& r){
  37. printf("+A(&&) [%+03lld] ([%+03lld])\n",(size_t)this-st,(size_t)&r-st);
  38. arr=r.arr;
  39. r.arr=nullptr;
  40. }
  41. A(A& r){
  42. printf("+A(&) [%+03lld] ([%+03lld])\n",(size_t)this-st,(size_t)&r-st);
  43. arr=new char[1024*1024];
  44. for (int i=0;i<1024*1024;i++)
  45. arr[i]=r.arr[i];
  46.  
  47. }
  48. A operator+(A& r) {
  49. A temp;
  50. for (int i=0;i<1024*1024;i++)
  51. temp.arr[i]=arr[i]+r.arr[i];
  52. printf(" +(&) [%+03lld] = [%+03lld]+[%+03lld]\n",(size_t)&temp-st,(size_t)this-st,(size_t)&r-st);
  53. return temp;
  54. }
  55. };
  56.  
  57. void add(A& a,A& b,A& c){
  58. printf("f+(&) [%+03lld] = [%+03lld]+[%+03lld]\n",(size_t)&a-st,(size_t)&b-st,(size_t)&c-st);
  59. for (int i=0;i<1024*1024;i++)
  60. a.arr[i]=b.arr[i]+c.arr[i];
  61. }
  62.  
  63. int main(void) {
  64. int r;st=(size_t)&r;
  65. printf("\n ==1==\n");
  66. {
  67. A a,b,c;
  68. a=b+c;
  69. }
  70. printf("\n ==2==\n");
  71. {
  72. A a,b,c;
  73. add(a,b,c);
  74. }
  75. system("pause");
  76. return 0;
  77. }
  78.  
Success #stdin #stdout #stderr 0.01s 6976KB
stdin
Standard input is empty
stdout
    ==1==
+A()   [+04]
+A()   [+12]
+A()   [+20]
+A()   [+28]
 +(&)  [+28] = [+12]+[+20]
=A(&&) [+04] = [+28]
~A()   [+28]
~A()   [+20]
~A()   [+12]
~A()   [+04]

    ==2==
+A()   [+12]
+A()   [+20]
+A()   [+28]
f+(&)  [+12] = [+20]+[+28]
~A()   [+28]
~A()   [+20]
~A()   [+12]
stderr
sh: 1: pause: not found