@@ -43,15 +43,16 @@ void finalizer_wrapper(SEXP p){
4343template <
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>
4849class 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{
5657public:
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