Compare commits
3 Commits
eaad6ba6e0
...
9dfb6e4740
| Author | SHA1 | Date | |
|---|---|---|---|
| 9dfb6e4740 | |||
| 53b2247432 | |||
| 83ca3d8893 |
@ -96,7 +96,7 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
#define rcp_root() \
|
||||
#define rcp_managed_root(classname) \
|
||||
public: \
|
||||
void rcp_inc() const \
|
||||
{ \
|
||||
@ -110,15 +110,18 @@ public:
|
||||
} \
|
||||
} \
|
||||
private: \
|
||||
mutable std::atomic<int> ref_count{0}
|
||||
mutable std::atomic<int> ref_count{0}; \
|
||||
rcp_managed(classname)
|
||||
|
||||
#define rcp_managed(classname) \
|
||||
rcp<classname> get_rcp() \
|
||||
{ \
|
||||
return rcp<classname>(this); \
|
||||
} \
|
||||
template <typename... Args> \
|
||||
static rcp<classname> create(Args&&... args) \
|
||||
{ \
|
||||
return (new classname(std::forward<Args>(args)...))->get_rcp(); \
|
||||
}
|
||||
public: \
|
||||
rcp<classname> get_rcp() \
|
||||
{ \
|
||||
return rcp<classname>(this); \
|
||||
} \
|
||||
template <typename... Args> \
|
||||
static rcp<classname> create(Args&&... args) \
|
||||
{ \
|
||||
return (new classname(std::forward<Args>(args)...))->get_rcp(); \
|
||||
} \
|
||||
private:
|
||||
|
||||
@ -8,7 +8,7 @@ static int myderived_destruct;
|
||||
|
||||
class MyBase
|
||||
{
|
||||
rcp_root();
|
||||
rcp_managed_root(MyBase);
|
||||
|
||||
protected:
|
||||
MyBase(int x, int y)
|
||||
@ -20,13 +20,12 @@ protected:
|
||||
{
|
||||
mybase_destruct++;
|
||||
}
|
||||
|
||||
public:
|
||||
rcp_managed(MyBase);
|
||||
};
|
||||
|
||||
class MyDerived : public MyBase
|
||||
{
|
||||
rcp_managed(MyDerived);
|
||||
|
||||
protected:
|
||||
MyDerived(double v) : MyBase(1, 2)
|
||||
{
|
||||
@ -37,9 +36,6 @@ protected:
|
||||
{
|
||||
myderived_destruct++;
|
||||
}
|
||||
|
||||
public:
|
||||
rcp_managed(MyDerived)
|
||||
};
|
||||
|
||||
void t1()
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user