#include <iostream>
#include <memory>
template<typename T>
class BakeTame
{
public:
BakeTame(const int& samples)
{
m_numSamples = samples;
m_samples.reset(new T [m_numSamples],
std::default_delete<T[]>());
std::cout << __func__ << std::endl;
}
BakeTame& operator=(const BakeTame&) = delete;
~BakeTame() {
std::cout << __func__ << std::endl;
}
private:
unsigned int m_numSamples; // Number of samples per channel
std::shared_ptr<T> m_samples;
};
template<typename T>
class Tame
{
public:
Tame(const int& channels)
{
m_channels = std::shared_ptr<BakeTame<T>>(new BakeTame<T>(channels));
std::cout << __func__ << std::endl;
}
~Tame() {
std::cout << __func__ << std::endl;
}
protected:
std::shared_ptr<BakeTame<T>> m_channels; // member variable of type BakeTame
};
class test {
public:
test(const Tame<int>& frame): mframe(frame) {};
const Tame<int>& mframe;
};
int main()
{
Tame<int> variable(8);
{
auto t = test(variable);
std::cout << __func__ << std::endl;
}
{
auto t = test(variable);
std::cout << __func__ << std::endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8bWVtb3J5PgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgQmFrZVRhbWUKewoJcHVibGljOgoJQmFrZVRhbWUoY29uc3QgaW50JiBzYW1wbGVzKQoJewoJCW1fbnVtU2FtcGxlcyA9IHNhbXBsZXM7CgkJbV9zYW1wbGVzLnJlc2V0KG5ldyBUIFttX251bVNhbXBsZXNdLAoJCQkJc3RkOjpkZWZhdWx0X2RlbGV0ZTxUW10+KCkpOwoJCXN0ZDo6Y291dCA8PCBfX2Z1bmNfXyA8PCBzdGQ6OmVuZGw7Cgl9CgoJQmFrZVRhbWUmIG9wZXJhdG9yPShjb25zdCBCYWtlVGFtZSYpID0gZGVsZXRlOwoKCX5CYWtlVGFtZSgpIHsKCQlzdGQ6OmNvdXQgPDwgX19mdW5jX18gPDwgc3RkOjplbmRsOwoJfQoKCXByaXZhdGU6Cgl1bnNpZ25lZCBpbnQgbV9udW1TYW1wbGVzOyAgIC8vIE51bWJlciBvZiBzYW1wbGVzIHBlciBjaGFubmVsCglzdGQ6OnNoYXJlZF9wdHI8VD4gbV9zYW1wbGVzOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgVGFtZQp7CglwdWJsaWM6CglUYW1lKGNvbnN0IGludCYgY2hhbm5lbHMpCgl7CgkJbV9jaGFubmVscyA9IHN0ZDo6c2hhcmVkX3B0cjxCYWtlVGFtZTxUPj4obmV3IEJha2VUYW1lPFQ+KGNoYW5uZWxzKSk7CgkJc3RkOjpjb3V0IDw8IF9fZnVuY19fIDw8IHN0ZDo6ZW5kbDsKCX0KCgl+VGFtZSgpIHsKCQlzdGQ6OmNvdXQgPDwgX19mdW5jX18gPDwgc3RkOjplbmRsOwoJfQoKCXByb3RlY3RlZDoKCXN0ZDo6c2hhcmVkX3B0cjxCYWtlVGFtZTxUPj4gbV9jaGFubmVsczsgICAgIC8vIG1lbWJlciB2YXJpYWJsZSBvZiB0eXBlIEJha2VUYW1lCn07CgpjbGFzcyB0ZXN0IHsKCXB1YmxpYzoKCXRlc3QoY29uc3QgVGFtZTxpbnQ+JiBmcmFtZSk6IG1mcmFtZShmcmFtZSkge307Cgljb25zdCBUYW1lPGludD4mIG1mcmFtZTsKfTsKCmludCBtYWluKCkKewoJVGFtZTxpbnQ+IHZhcmlhYmxlKDgpOwoJewoJCWF1dG8gdCA9IHRlc3QodmFyaWFibGUpOwoJCXN0ZDo6Y291dCA8PCBfX2Z1bmNfXyA8PCBzdGQ6OmVuZGw7Cgl9Cgl7CgkJYXV0byB0ID0gdGVzdCh2YXJpYWJsZSk7CgkJc3RkOjpjb3V0IDw8IF9fZnVuY19fIDw8IHN0ZDo6ZW5kbDsKCX0KCXJldHVybiAwOwp9Cg==