Skip to content

Commit 0ca897d

Browse files
committed
add argument to XPtr template to run finalizer on exit
1 parent 0566d7c commit 0ca897d

File tree

1 file changed

+9
-8
lines changed

1 file changed

+9
-8
lines changed

inst/include/Rcpp/XPtr.h

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,15 +43,16 @@ void finalizer_wrapper(SEXP p){
4343
template <
4444
typename T,
4545
template <class> class StoragePolicy = PreserveStorage,
46-
void Finalizer(T*) = standard_delete_finalizer<T>
46+
void Finalizer(T*) = standard_delete_finalizer<T>,
47+
bool finalizeOnExit = false
4748
>
4849
class XPtr :
49-
public StoragePolicy< XPtr<T,StoragePolicy, Finalizer> >,
50-
public SlotProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
51-
public AttributeProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
52-
public TagProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
53-
public ProtectedProxyPolicy< XPtr<T,StoragePolicy, Finalizer> >,
54-
public RObjectMethods< XPtr<T,StoragePolicy, Finalizer> >
50+
public StoragePolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
51+
public SlotProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
52+
public AttributeProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
53+
public TagProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
54+
public ProtectedProxyPolicy< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >,
55+
public RObjectMethods< XPtr<T,StoragePolicy, Finalizer, finalizeOnExit> >
5556
{
5657
public:
5758

@@ -148,7 +149,7 @@ class XPtr :
148149
}
149150

150151
void setDeleteFinalizer() {
151-
R_RegisterCFinalizerEx( Storage::get__(), finalizer_wrapper<T,Finalizer> , FALSE) ;
152+
R_RegisterCFinalizerEx( Storage::get__(), finalizer_wrapper<T,Finalizer> , (Rboolean) finalizeOnExit) ;
152153
}
153154

154155
/**

0 commit comments

Comments
 (0)