|
|
@ -72,8 +72,11 @@ namespace gp { |
|
|
|
|
|
|
|
shared_ptr(T* _data, gp::allocator& _owner) |
|
|
|
: data(_data) |
|
|
|
, refcounter((std::atomic_int)owner.allocate(sizeof(std::atomic_int))) |
|
|
|
, owner(_owner) |
|
|
|
{} |
|
|
|
{ |
|
|
|
refcounter->store(1); |
|
|
|
} |
|
|
|
|
|
|
|
void dirty_clear() { |
|
|
|
if(!refcounter) return; |
|
|
@ -89,9 +92,6 @@ namespace gp { |
|
|
|
template<typename ...U> |
|
|
|
static shared_ptr make(gp::allocator& owner, U&&... args) { |
|
|
|
auto ptr = owner.allocate(sizeof(T)); |
|
|
|
auto shared_atomic = owner.allocate(sizeof(std::atomic_int)); |
|
|
|
refcounter = new(shared_atomic) std::atomic_int(); |
|
|
|
refcounter->store(1); |
|
|
|
return shared_ptr(new(ptr) T(gp::forward<U>(args)...), owner); |
|
|
|
} |
|
|
|
|
|
|
|