#include #include void a( string & sm ) { string sm_a = sm; // share } void b( string & sm ) { string sm_b = sm; // share } void c( string & sm, string & sh1 ) { string sm_c = sm; // copy string sh1_c = sh1; // copy } void d( string & sm, string & sh1 ) { string sm_d = sm; // copy string sh1_d = sh1; // copy } void e( string & sm, string & sh1, string & sh2 ) { string sm_e = sm; // copy string sh1_e = sh1; // copy string sh2_e = sh2; // share } void f( string & sm, string & sh1 ) { string sm_f = sm; // copy string sh1_f = sh1; // copy } void g( string & sm ) { string sm_g = sm; // share } void helper2( string & sm, string & sh1 ) { d( sm, sh1 ); string_sharectx ctx_on = {NEW_SHARING}; string sh2 = "sh2"; e( sm, sh1, sh2 ); } void helper1( string & sm ) { b( sm ); string_sharectx ctx_off = {NO_SHARING}; string sh1 = "sh1"; c( sm, sh1 ); helper2( sm, sh1 ); f( sm, sh1 ); } int main() { string sm = "sm"; a( sm ); helper1( sm ); g( sm ); }