@@ -43,15 +43,16 @@ void finalizer_wrapper(SEXP p){
43
43
template <
44
44
typename T,
45
45
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
47
48
>
48
49
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 > >
55
56
{
56
57
public:
57
58
@@ -148,7 +149,7 @@ class XPtr :
148
149
}
149
150
150
151
void setDeleteFinalizer () {
151
- R_RegisterCFinalizerEx ( Storage::get__ (), finalizer_wrapper<T,Finalizer> , FALSE ) ;
152
+ R_RegisterCFinalizerEx ( Storage::get__ (), finalizer_wrapper<T,Finalizer> , (Rboolean) finalizeOnExit ) ;
152
153
}
153
154
154
155
/* *
0 commit comments