通过指针使用构造函数
Using a Constructor through pointer
我有一个问题。
编译器一直警告我无效地使用构造函数。
我想做的就是在班上创建一个新课程。什么错了吗?
int StArray::addCS_Course(int id, int CourseNum, char* CourseName,int HwNum, float HwWeigh, bool Takef, char* BookName){
int i;
CS_Course* course;
if ((CourseNum<0)||(HwNum<0)||(HwWeigh<0)||(HwWeigh>1))
return 0;
for (i=0;i<StudentNum_;i++){
if (Arr_[i]->getID()==id) {
course=(CS_Course*)malloc(sizeof(CS_Course*));
if (course==NULL) {
fprintf(stderr,"Malloc failedn");
exit(0);
}
course->CS_Course::CS_Course(CourseNum,CourseName,HwNum,HwWeigh,Takef, BookName);
if (Arr_[i]->addCS_Course(course)==1)
return 1;
else
{
free(course);
return 0;
}
}
}
return 0;
}
要在c++中创建一个新对象,不能这样做:
course = (CS_Course*) malloc(...);
course->CS_Course::CS_Course(...);
你这样做:
course = new CS_Course(...);
该代码负责分配内存和调用构造函数。
然后用delete course;
而不是free(course);
删除对象
(但是正如juanchopanza在评论中指出的那样,像这样用C风格在堆上创建对象被认为是不好的形式——你应该更喜欢使用标准库容器,避免使用new
。这是另一个话题了——你可能想读一本关于现代c++的教程。
Edit by @RemyLebeau:如果你需要在现有内存中构造一个对象,使用placement new代替:
buffer = malloc(...);
course = new (buffer) CS_Course(...);
但是你必须手动调用析构函数:
course->~CS_Course();
free(buffer);
malloc(sizeof(CS_Course*))
为指向CS_Course
的指针分配了足够的空间,而不是CS_Course
本身。如果malloc
是为对象动态分配内存的正确方法,您需要像这样调用它:
malloc(sizeof(CS_Course));
然而,malloc
不是这样做的正确方法;在c++中,您可以使用new
动态地为对象分配内存:
course = new CS_Course; //Use the default constructor
或
//Use constructor with 2 parameters
course = new CS_Course(constructor_param1, constructor_param2);
当然,如果你不需要指针,你可以(而且应该)像这样创建一个CS_Course对象(通常被称为在堆栈上分配):
CS_Course course; //default constructor
//constructor with 2 parameters
CS_Course course2(constructor_param1, constructor_param2);
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- 复制构造函数C++无法正确复制指针
- 使用基类指针调用基类的值构造函数的语法是什么?
- C++ 对象指针数组的复制构造函数
- 构造函数 (C++) 中的 char 指针参数存在问题
- 为什么使用 std::istream_iterator 构造函数返回指针
- 在对象构造期间,将指向尚未构造的子对象的指针传递给另一个子对象的构造函数是否危险?
- 使用指向成员函数的指针在另一个类中调用类构造函数
- 通过从构造函数中的'this'复制的指针改变常量对象
- 为什么指针对象没有调用默认构造函数
- 函数返回时,带指针的复制构造函数失败
- 如何编写复制构造函数来复制指针?
- 如何使用函数(而不是构造函数)将派生类对象分配给基类指针
- 使用 Rcpp 公开将指向对象的指针作为参数的构造函数
- std::shared_ptr 使用别名构造函数,是否可以检索初始指针值?
- 如何正确实现具有原始指针的类的复制构造函数?
- 构造函数主体内的本地指针C++内存泄漏
- 如何在将原始指针移动到基类构造函数之前从unique_ptr中提取原始指针
- 有没有办法通过读取 c++ 中的文件来构造函数指针
- 构造函数指针改变