我需要在函数内部创建一个类的实例并返回指向该实例的指针,这种做法是否合适?
以下是示例代码:
template <typename T>
ImplicatedMembershipFunction<T>*
TriangularMF<T>::minImplicate(const T &constantSet) const
{
static ImplicatedType* resultingSet = new ImplicatedType();
// do something to generate resultingSet...
return resultingSet;
}
我希望返回指针,因为需要在容器中有一个基类的子类。在上面的代码中,ImplicatedType
是在TriangularMF<T>
中定义的一个类,并且派生自ImplicatedMembershipFunction<T>
。将会有各种模板类,如TriangularMF
,它们都有一个从ImplicatedMembershipFunction<T>
派生的嵌套类,我需要用同样的方式处理它们。例如,在库外,我可能想要做这样的事情:
TriangularMF<double> trmf(0,1,2);
TrapesoidalMF<double> trpmf(0,1,3,2); // a class like TriangularMF but
// ImplicatedType is different
ImplicatedMembershipFunction<double>* itrmf = trmf.implicate(0.6);
ImplicatedMembershipFunction<double>* itrpmf = trpmf.implicate(0.6); // same as above.
// use them in the same way:
vector<ImplicatedMembershipFunction<double>*> vec;
vec.push_back(itrmf);
vec.push_back(itrpmf);
我不想使用C++11的移动语义或
std::shared_ptr
等功能,原因是我不想强制我的队友在他们的计算机上安装更新的g++版本。因为库中有大量模板代码,所以我无法给他们提供已编译的库版本。
编辑
这个库将被线程化。特别是,TriangularMF<T>::minImplicate
将同时在多个线程中运行。因此,将minImplicate
作为互斥任务对性能没有意义。
new
调用用于初始化静态变量。它仅在创建静态指针istefs
时发生。尽管有=
,但该语句不是赋值语句。问题是...谁来销毁它? - Emilio Garavaglia