【发布时间】:2014-06-02 10:52:45
【问题描述】:
我正在尝试为具有虚函数的类创建内联构造函数。
总体而言,该函数必须是虚拟的,因为 Shape::print 将被另一个类调用,不知道它正在处理哪种(确切类型)Shape。
我看到这一定是某种与内存相关的问题。当使用我的类对象不是构造但作为指针时,如何调用此函数?还是我错过了什么?
#include <stdio.h>
#include <stdlib.h>
using namespace std;
class Shape {
public:
virtual void print(){};
};
class Circle : Shape {
private:
int r;
public:
Circle(int radius){
this->r = radius;
}
// My "inline-constructor"
static Circle* make(int radius){
Circle* circ = (Circle*) malloc(sizeof(Circle));
circ->r = radius;
return circ;
};
virtual void print(){
printf("%u", this->r);
};
};
int main(){
Circle circObj(5);
circObj.print(); // Works fine
Circle* circPtr = Circle::make(10);
circPtr->print(); // Crashes
return 0;
}
提前致谢,如有任何帮助,我们将不胜感激。
【问题讨论】:
-
“内联构造函数”更好的名称是“工厂函数”
-
如果我调用
(new Circle(10))->print();之类的东西,之后对象不会从内存中删除吗? -
另外,在每个
malloc之后应该调用free,在每个new之后应该调用delete以避免内存泄漏。或者使用智能指针。
标签: c++ class pointers virtual