@@ -18,7 +18,7 @@ module user_object_m
1818
1919 module function construct (user_object ) result(user_object_ptr)
2020 implicit none
21- type (user_object_t), intent (in ), pointer :: user_object
21+ type (user_object_t), intent (inout ), pointer :: user_object
2222 type (user_object_ptr_t) :: user_object_ptr
2323 end function
2424
@@ -44,6 +44,7 @@ module subroutine free(self)
4444 module procedure construct
4545 call assert(associated (user_object), " construct_from_pointer: associated(user_object)" )
4646 user_object_ptr% ref = > user_object
47+ nullify(user_object)
4748 call user_object_ptr% start_counter
4849 end procedure
4950
@@ -71,15 +72,16 @@ program main
7172
7273 print * , " Defining smart_pointer_1."
7374 smart_pointer_1 = user_object_ptr_t(user_object)
75+ call assert(.not. associated (user_object), " main: .not. associated(user_object)" )
7476 print * , " Reference count = " , smart_pointer_1% reference_count()
7577 print * , " Copying smart_pointer_1 into smart_pointer_2."
7678
7779 smart_pointer_2 = smart_pointer_1
7880 print * , " Reference count = " , smart_pointer_1% reference_count()
79- call assert(smart_pointer_1% reference_count()==smart_pointer_2% reference_count(), " consistent counts" )
81+ call assert(smart_pointer_1% reference_count()==smart_pointer_2% reference_count(), " main: consistent counts" )
8082
8183 call new_reference(smart_pointer_2)
82- call assert(smart_pointer_1% reference_count()==smart_pointer_2% reference_count(), " consistent counts" )
84+ call assert(smart_pointer_1% reference_count()==smart_pointer_2% reference_count(), " main: consistent counts" )
8385 print * , " Reference count = " , smart_pointer_1% reference_count()
8486 print * , " smart_pointer_1 and smart_pointer_2 going out of scope"
8587 end block
0 commit comments