#include <iostream>
struct BigObj
{
BigObj( ) : m_useCount( 0 ) { }
int m_useCount;
int m_stuff[ 4096 ] ;
} ;
void BigObjByValue( BigObj b)
{
b.m_useCount ++ ;
std:: cout << "BigObjByValue " << ( & b) << ". m_useCount is now " << b.m_useCount << std:: endl ;
}
void BigObjByPtr( BigObj* b)
{
b- > m_useCount++ ;
std:: cout << "BigObjByValue " << ( b) << ". m_useCount is now " << b- > m_useCount << std:: endl ;
}
void BigObjByConstPtr( const BigObj* b)
{
//b->m_useCount++; // compiler won't allow this, try uncommenting.
std:: cout << "BigObjByValue " << ( b) << ". m_useCount is now " << b- > m_useCount << std:: endl ;
}
int main( )
{
BigObj mainB;
std:: cout << "Created mainB at " << ( & mainB) << " useCount = " << mainB.m_useCount << std:: endl ;
BigObjByValue( mainB) ;
std:: cout << "in main, m_useCount = " << mainB.m_useCount << std:: endl ;
BigObjByPtr( & mainB) ;
std:: cout << "in main, m_useCount = " << mainB.m_useCount << std:: endl ;
BigObjByConstPtr( & mainB) ;
std:: cout << "in main, m_useCount = " << mainB.m_useCount << std:: endl ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgogICAgc3RydWN0IEJpZ09iagogICAgewogICAgICAgIEJpZ09iaigpIDogbV91c2VDb3VudCgwKSB7fQoKICAgICAgICBpbnQgbV91c2VDb3VudDsKICAgICAgICBpbnQgbV9zdHVmZls0MDk2XTsKICAgIH07CgogICAgdm9pZCBCaWdPYmpCeVZhbHVlKEJpZ09iaiBiKQogICAgewogICAgICAgIGIubV91c2VDb3VudCsrOwogICAgICAgIHN0ZDo6Y291dCA8PCAiQmlnT2JqQnlWYWx1ZSAiIDw8ICgmYikgPDwgIi4gbV91c2VDb3VudCBpcyBub3cgIiA8PCBiLm1fdXNlQ291bnQgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIHZvaWQgQmlnT2JqQnlQdHIoQmlnT2JqKiBiKQogICAgewogICAgICAgIGItPm1fdXNlQ291bnQrKzsKICAgICAgICBzdGQ6OmNvdXQgPDwgIkJpZ09iakJ5VmFsdWUgIiA8PCAoYikgPDwgIi4gbV91c2VDb3VudCBpcyBub3cgIiA8PCBiLT5tX3VzZUNvdW50IDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgICB2b2lkIEJpZ09iakJ5Q29uc3RQdHIoY29uc3QgQmlnT2JqKiBiKQogICAgewogICAgICAgIC8vYi0+bV91c2VDb3VudCsrOyAvLyBjb21waWxlciB3b24ndCBhbGxvdyB0aGlzLCB0cnkgdW5jb21tZW50aW5nLgogICAgICAgIHN0ZDo6Y291dCA8PCAiQmlnT2JqQnlWYWx1ZSAiIDw8IChiKSA8PCAiLiBtX3VzZUNvdW50IGlzIG5vdyAiIDw8IGItPm1fdXNlQ291bnQgPDwgc3RkOjplbmRsOwogICAgfQoKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBCaWdPYmogbWFpbkI7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJDcmVhdGVkIG1haW5CIGF0ICIgPDwgKCZtYWluQikgPDwgIiB1c2VDb3VudCA9ICIgPDwgbWFpbkIubV91c2VDb3VudCA8PCBzdGQ6OmVuZGw7CgogICAgICAgIEJpZ09iakJ5VmFsdWUobWFpbkIpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiaW4gbWFpbiwgbV91c2VDb3VudCA9ICIgPDwgbWFpbkIubV91c2VDb3VudCA8PCBzdGQ6OmVuZGw7CgogICAgICAgIEJpZ09iakJ5UHRyKCZtYWluQik7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJpbiBtYWluLCBtX3VzZUNvdW50ID0gIiA8PCBtYWluQi5tX3VzZUNvdW50IDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgQmlnT2JqQnlDb25zdFB0cigmbWFpbkIpOwogICAgICAgIHN0ZDo6Y291dCA8PCAiaW4gbWFpbiwgbV91c2VDb3VudCA9ICIgPDwgbWFpbkIubV91c2VDb3VudCA8PCBzdGQ6OmVuZGw7CgogICAgICAgIHJldHVybiAwOwogICAgfQo=