在C++中创建"new instance of object"方法

Create "new instance of object" method in C++

本文关键字:of object 方法 instance new 创建 C++      更新时间:2023-10-16

有没有一种方法可以在不使用模板的情况下从该类创建类的实例?我需要做点什么static classobj* classobj::create (){return new this;}

现在我使用类模板并传递到可创建类的模板类型,如:

template<class T>
class basic_class  {
   public:
   static T *create(int param) { return new T(param); }
}

class A : public basic_class<A> {}

为什么不这样?

return new classobj;

或者这个:

return new decltype(*this);

但请不要这样做。函数返回的指针具有不明确的所有权语义。现在我们通常不需要原始指针。

如果我正确理解你的问题,你想创建一个像这样的非模板类:

class Base
{
public:
  static (Magic)* create() { return new (Magic); }
}

然后我们可以这样称呼这种方法:

class Derived : public Base {};
Derived* object = Derived::create();

问题是:我们用什么咒语来代替"(魔法)"?不幸的是,没有这样的语法。静态类方法就像常规函数一样。在声明函数时,所有涉及的类型都必须是已知的。

你能详细说明一下你为什么不想使用模板吗?也许还有另一种方法可以解决你的问题。

如果我正确理解你的问题,那么你必须为每个类添加静态创建:

class A
{
public:
  //to create
  static A* create(int param) { return new A(param); }
};

然后这样做:

A* ptr = A::create(4);

或者更好,避免内存泄漏

std::unique_ptr<A> uptr(A::create(4));

或者,如果您的问题是在basic_class中为任何构造函数创建一个"智能"创建,那么请在C++11:中执行此操作

template <class T>
class base_class
{
public:
  template<typename... Params>
  static T* construct(Params&&... parameters) { return new T(std::forward<Params>(parameters)...); }
};
class A : public base_class<A>
{
public:
  A(const std::string& s) {}
  A(int i) {}
};

因此

A::create(std::string("Hey"));
A::create(5);

现在两个都工作了。

编辑:基类定义了"construct"方法。所以上面应该是

A::construct(std::string("Hey"));
A::construct(5);

首先实现一个复制构造函数

 classobj(const classobj& obj);

然后

 return new classobj(*this)