在C++中创建"new instance of object"方法
Create "new instance of object" method in C++
有没有一种方法可以在不使用模板的情况下从该类创建类的实例?我需要做点什么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)
相关文章:
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 具有变量Number of Arguments的std::函数的矢量
- Capacity of a deque
- C++ Equivalent of Java Map<String, Object>
- 根据标准,究竟什么是"declaration of an object"
- 如何修复警告"the compiler can assume that the address of 'object' will never be NULL"
- "Allocating an object of abstract class type"错误,尽管所有函数都有实现
- C++常见问题 32.8 "pass an object of a C++ class to/from a C function"问题
- 为什么在返回子对象时"that is the complete object of a subobject"延长对象的生存期?
- 消除警告"construction of local static object is not thread-safe"
- 抽象类和虚方法问题:"cannot allocate an object of abstract type"
- "size of the largest possible object on the target platform" size_t
- 名称查找是否应该"in the class of the object expression"查找该类的成员?
- 在C++中创建"new instance of object"方法
- shared_ptr : "call of an object of a class type without appropriate operator() or conversion functio
- One-past-end-of-object pointers
- 错误:尽管实现了所有虚拟功能,但仍"Allocating an object of abstract class type"
- "vector of objects"大小与"vector of Object pointers"