fork(1) download
  1. #include <iostream>
  2. #include <memory>
  3.  
  4. template<typename T>
  5. class BakeTame
  6. {
  7. public:
  8. BakeTame(const int& samples)
  9. {
  10. m_numSamples = samples;
  11. m_samples.reset(new T [m_numSamples],
  12. std::default_delete<T[]>());
  13. std::cout << __func__ << std::endl;
  14. }
  15.  
  16. BakeTame& operator=(const BakeTame&) = delete;
  17.  
  18. ~BakeTame() {
  19. std::cout << __func__ << std::endl;
  20. }
  21.  
  22. private:
  23. unsigned int m_numSamples; // Number of samples per channel
  24. std::shared_ptr<T> m_samples;
  25. };
  26.  
  27. template<typename T>
  28. class Tame
  29. {
  30. public:
  31. Tame(const int& channels)
  32. {
  33. m_channels = std::shared_ptr<BakeTame<T>>(new BakeTame<T>(channels));
  34. std::cout << __func__ << std::endl;
  35. }
  36.  
  37. ~Tame() {
  38. std::cout << __func__ << std::endl;
  39. }
  40.  
  41. protected:
  42. std::shared_ptr<BakeTame<T>> m_channels; // member variable of type BakeTame
  43. };
  44.  
  45. class test {
  46. public:
  47. test(const Tame<int>& frame): mframe(frame) {};
  48. const Tame<int>& mframe;
  49. };
  50.  
  51. int main()
  52. {
  53. Tame<int> variable(8);
  54. {
  55. auto t = test(variable);
  56. std::cout << __func__ << std::endl;
  57. }
  58. {
  59. auto t = test(variable);
  60. std::cout << __func__ << std::endl;
  61. }
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0s 4292KB
stdin
Standard input is empty
stdout
BakeTame
Tame
main
main
~Tame
~BakeTame