Skip to content

Commit 09f75c4

Browse files
authored
Merge pull request #40 from sourceryinstitute/nullify-user-pointer
Nullify the user-object pointer during smart-pointer construction
2 parents 7ed0b8e + ccfb6c6 commit 09f75c4

File tree

1 file changed

+5
-3
lines changed

1 file changed

+5
-3
lines changed

example/smart_pointer.f90 renamed to example/user_object_smart_pointer.f90

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)