有三种方法可以使用关键字“new”。首先是正常的方式。假设学生是一个班级。
Student *pStu=new Student("Name",age);
第二种方式。只请求内存空间而不调用构造函数。
Student *pArea=(Student*)operator new(sizeof(student));//
第三种方式称为“安置新”。只调用构造函数来初始化内存空间。
new (pArea)Student("Name",age);
所以,我在下面写了一些代码。
class Student
{
private:
std::string _name;
int _age;
public:
Student(std::string name, int age):_name(name), _age(age)
{
std::cout<<"in constructor!"<<std::endl;
}
~Student()
{
std::cout<<"in destructor!"<<std::endl;
}
Student & assign(const Student &stu)
{
if(this!=&stu)
{
//here! Is it a good way to implement the assignment?
this->~Student();
new (this)Student(stu._name,stu._age);
}
return *this;
}
};
此代码适用于 gcc。但我不确定它是否会导致错误或者显式调用析构函数是危险的。打电话给我一些建议?</p>