@@ -102,11 +102,13 @@ class ObjectBridge {
102
102
bool isRecyclable = false )
103
103
{
104
104
static_assert (!std::is_same<T, CPPObject>::value, " " );
105
- CPPObject* cppObj = new CPPObject ( );
105
+ CPPObject* cppObj = ( CPPObject*) malloc ( sizeof (CPPObject) );
106
106
cppObj->realValue = (void *) obj;
107
107
cppObj->isRecyclableObj = isRecyclable;
108
108
if (autoRelease) {
109
109
cppObj->deleter = releaseCPPObject<T>;
110
+ } else {
111
+ cppObj->deleter = nullptr ;
110
112
}
111
113
return cppObj;
112
114
}
@@ -118,11 +120,15 @@ class ObjectBridge {
118
120
{
119
121
static_assert (!std::is_same<T, CPPObject>::value, " " );
120
122
static_assert (std::is_copy_constructible<T>::value, " " );
121
- CPPObject* cppObj = new CPPObject ();
122
- cppObj->realValue = new T (obj);
123
+ assert (autoRelease == true );
124
+ CPPObject* cppObj = (CPPObject*) malloc (sizeof (CPPObject) + sizeof (T));
125
+ cppObj->realValue = cppObj + 1 ;
126
+ new (cppObj->realValue ) T (obj);
123
127
cppObj->isRecyclableObj = isRecyclable;
124
128
if (autoRelease) {
125
129
cppObj->deleter = releaseCPPObject<T>;
130
+ } else {
131
+ cppObj->deleter = nullptr ;
126
132
}
127
133
return cppObj;
128
134
}
@@ -134,11 +140,15 @@ class ObjectBridge {
134
140
{
135
141
static_assert (!std::is_same<T, CPPObject>::value, " " );
136
142
static_assert (std::is_copy_constructible<T>::value, " " );
137
- CPPObject* cppObj = new CPPObject ();
138
- cppObj->realValue = new T (std::move (obj));
143
+ assert (autoRelease == true );
144
+ CPPObject* cppObj = (CPPObject*) malloc (sizeof (CPPObject) + sizeof (T));
145
+ cppObj->realValue = cppObj + 1 ;
146
+ new (cppObj->realValue ) T (std::move (obj));
139
147
cppObj->isRecyclableObj = isRecyclable;
140
148
if (autoRelease) {
141
149
cppObj->deleter = releaseCPPObject<T>;
150
+ } else {
151
+ cppObj->deleter = nullptr ;
142
152
}
143
153
return cppObj;
144
154
}
@@ -159,7 +169,7 @@ class ObjectBridge {
159
169
{
160
170
T* typedObj = (T*) obj;
161
171
if (typedObj != nullptr ) {
162
- delete typedObj;
172
+ typedObj-> ~T () ;
163
173
}
164
174
}
165
175
0 commit comments