В настоящее время я работаю в лаборатории для своего класса операционных систем, и у меня возникают проблемы с пониманием, почему не назначается значение, указанное в инициализации поля по умолчанию для класса.У меня есть следующий класс планировщика:
class LOOK : SSTF {
public:
io_req* pop() override;
};
, который наследует от этого планировщика:
class SSTF : protected IOSched {
public:
virtual io_req* pop() override;
virtual void push(io_req* new_req) override;
protected:
io_req* left_pop();
io_req* right_pop();
int dir;
LinkedList left;
LinkedList right;
};
Где IOSched - это чистый виртуальный класс с методами pop () и push () иПоле curr_req, и это класс LinkedList:
class LinkedList {
public:
io_req* pop();
void push(io_req* new_req);
void push_in_order(io_req* new_req);
io_req* top() const;
void reset_dist(io_req* new_curr);
private:
void insert_between(io_req_node* new_prev, io_req_node* new_next, io_req_node* new_node);
io_req_node* head = nullptr;
io_req_node* tail = nullptr;
};
Из моего понимания C ++, когда я выделяю новый объект LOOK следующим образом:
sched = (IOSched*)(new LOOK());
Я получу указатель на выделенный в куче объект LOOK
, который будет содержать объект SSTF
, который будет содержать два объекта LinkedList
, left
и right
, которые будут инициализированы с помощью head
и tail
как nullptr
.
Однако по какой-то причине я получаю значение 0x203d1
для left.head
, а 0x0
для остальных.Это происходит только тогда, когда sched
инициализируется как объект LOOK
, а не когда SSTF
(для лаборатории мне нужно реализовать несколько разных алгоритмов).
Заранее спасибо!