程序破碎,当我试图改变类变量时 例如:
class ITask
{
public:
ITask();
void perform(int,int);
private:
int total = 0;
}
__________implementation___________
void ITask::perform(int a,int b)
{
int time=rand()%10;
this->total=time;
}
没有字符串this->total=time;
程序可以正常工作。
答案 0 :(得分:3)
正如您所说,您使用ITask* task; task->perform(a,b);
。但是,ITask* task;
仅声明指向ITask的指针,它不会创建实例。因此,您的perform
成员函数会尝试写入它认为total
所在的内存位置,但实际上内存未分配用于此目的。因此崩溃取决于行this->total=time;
的存在。但请注意,它在没有该行的情况下工作的事实纯粹是实现定义的,因为在没有实例的情况下调用非静态成员函数仍然是未定义的行为,即没有有效的this
指针。
使用
ITask task;
task.perform(a,b);
(为函数本地创建ITask
)或
ITask* task = new ITask();
task->perform(a,b);
//later deallocate:
delete task;
(创建一个ITask
,直到你调用delete
为止。两者都创建实际对象。