tag:blogger.com,1999:blog-26653368.post7338366797684674112..comments2022-03-05T01:47:39.748+05:30Comments on Tech Musings and Assorted Thoughts: C++ Challenge of the Month: July 2008Unknownnoreply@blogger.comBlogger1125tag:blogger.com,1999:blog-26653368.post-64500173361667241902008-09-25T17:38:00.000+05:302008-09-25T17:38:00.000+05:30note: i use "{" "}" instead of...note: i use "{" "}" instead of "<" and ">".<BR/><BR/>#include {iostream}<BR/><BR/>class base {<BR/>};<BR/><BR/>class derived : public base {<BR/>public:<BR/> ~derived() { std::cout << "~derived\n"; }<BR/>};<BR/><BR/>class tmp_base {<BR/>public:<BR/> virtual void destroy(){}<BR/>};<BR/><BR/>template {class DERIVED}<BR/>class tmp : public tmp_base {<BR/> DERIVED* p_;<BR/>public:<BR/> tmp(DERIVED* p) : p_(p) {}<BR/> virtual void destroy() { delete p_; }<BR/>};<BR/><BR/>template{class BASE}<BR/>class smart_ptr {<BR/> tmp_base* tmp_;<BR/>public:<BR/> template{class DERIVED}<BR/> smart_ptr(DERIVED* pd) : tmp_(new tmp{DERIVED}(pd)) {}<BR/> ~smart_ptr() { tmp_->destroy(); delete tmp_; }<BR/>};<BR/><BR/>int main(int argc, _TCHAR* argv[])<BR/>{<BR/> volatile int i = 1;<BR/> if(i == 1) {<BR/> smart_ptr{base} p(new derived);<BR/> }<BR/> return 0;<BR/>}valkerhttps://www.blogger.com/profile/13049413954111509098noreply@blogger.com