看看这堂课:
//HPP
class A {
public:
A();
~A();
B *fetchNew();
private:
B *currentValue;
}
//CPP
A::A() {}
A::~A {
delete currentValue;
}
B *A::fetchNew() {
delete currentValue;
currentValue = new B();
//apply magic to currentValue
return currentValue;
}
这个类包含一个指向B类实例的指针。每次调用fetchNew()
时,旧的都会被删除,一个新的被分配并且魔法被应用到它之后,在新的和闪亮的{{1}之后返回。
这种方法被频繁调用(在现实生活中,它是一种在游戏主循环中返回视图矩阵的方法,因此每帧调用一次,大约每秒60次)。
一旦A对象被删除,它将删除当前currentValue
,否则会泄漏。
有没有更好的方法来实现这个目标?
编辑:
这是实际的代码,因为它有一个扭曲(只是currentValue
方法):
fetchNow()
答案 0 :(得分:2)
有没有更好的方法来实现这个目标?
我建议使用 import datetime as dt
...
df1['Date'] = pd.to_datetime(df1['Date'], format="%m/%d/%Y")
# ORIGINAL GROUP BY (NO CHANGE)
df2 = df.groupby(['Company','Group','Period']).sum().reset_index()
df2['Pct_Growth_YoY'] = df2.sort_values('Period').groupby(['Company','Group'])\
.pct_change(4)
# LOCATE MAX QUARTER GROUP INDICES
maxgrps = df2.groupby(['Company','Group'])['Period']\
.apply(lambda row: row[row==row.max()].index.values[0])\
.reset_index()['Period'].values.tolist()
# UPDATE ONLY MAX QUARTER GROUP ROWS
df2.ix[maxgrps, 'Pct_Growth_YoY'] = \
df[(df['Date'] <= (dt.datetime.today() - dt.timedelta(days=365.25))) |
(df['Date'] >= dt.datetime(dt.datetime.today().year, 1, 1))]\
.groupby(['Company','Group','Period']).sum().reset_index()\
.groupby(['Company','Group']).pct_change(4)['Value']\
.iloc[maxgrps].values
而不是原始指针std::unique_ptr<B>
:
B*
//HPP
#include <memory>
class A {
public:
A();
~A();
std::unique_pty<B> fetchNew();
private:
// You don't need that: B *currentValue;
}
这种方法有几个优点:
//CPP
A::A() {}
A::~A {
// You don't need that: delete currentValue;
}
std::unique_ptr<B> A::fetchNew() {
// You don't need that: delete currentValue;
std::unique_ptr<B> newValue = std::make_unique<B>();
// apply magic to newValue and dereference using * or -> as with any raw pointer
return newValue;
}
A
结果的所有权转让在语义上是明确的fetchNew()
实例本身的生命周期范围。至于您编辑的添加内容,它应如下所示:
B