@@ -18,7 +18,7 @@ module user_object_m
18
18
19
19
module function construct (user_object ) result(user_object_ptr)
20
20
implicit none
21
- type (user_object_t), intent (in ), pointer :: user_object
21
+ type (user_object_t), intent (inout ), pointer :: user_object
22
22
type (user_object_ptr_t) :: user_object_ptr
23
23
end function
24
24
@@ -44,6 +44,7 @@ module subroutine free(self)
44
44
module procedure construct
45
45
call assert(associated (user_object), " construct_from_pointer: associated(user_object)" )
46
46
user_object_ptr% ref = > user_object
47
+ nullify(user_object)
47
48
call user_object_ptr% start_counter
48
49
end procedure
49
50
@@ -71,15 +72,16 @@ program main
71
72
72
73
print * , " Defining smart_pointer_1."
73
74
smart_pointer_1 = user_object_ptr_t(user_object)
75
+ call assert(.not. associated (user_object), " main: .not. associated(user_object)" )
74
76
print * , " Reference count = " , smart_pointer_1% reference_count()
75
77
print * , " Copying smart_pointer_1 into smart_pointer_2."
76
78
77
79
smart_pointer_2 = smart_pointer_1
78
80
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" )
80
82
81
83
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" )
83
85
print * , " Reference count = " , smart_pointer_1% reference_count()
84
86
print * , " smart_pointer_1 and smart_pointer_2 going out of scope"
85
87
end block
0 commit comments