Home > Net >  C Pointer class in place of DATA TYPE
C Pointer class in place of DATA TYPE

Time:10-11

class Student 
{ 
 public: //add any needed functions yourself 
 private: 
 string name; 
 int rollnumber; 
}

class University 
{ 
 public: 
// constructor 
 private: 
 int numberOfStudents; 
 SList<Student*> *list; // list is developed by me as a linked list but what is this Student* here, instead of just Student???
}

I have seen things like SList<Student> *list, so I can create a new list in the constructor by saying list = new SList<Student>;

But here, it doesn't work due to Student*. What should I do, and what will be the syntax to declare it?

CodePudding user response:

Just as SList* is a pointer to an SList, Student* is a pointer to a Student. If you want to new an SList of Student* pointers, it would look like this:

SList<Student*> *list;
...
list = new SList<Student*>;
...
delete list;

As such, you will likely also need to new and delete every Student that you want to store in the list.

SList<Student*> *list;
...
list = new SList<Student*>;
...
list->Add(new Student);
...
for (each student in the list)
    delete student;
delete list;

In modern C , if you need to use pointers to objects in dynamic storage, you should strive to avoid using new and delete manually at all. Make use of smart pointers instead, like std:unique_ptr/std::make_unique() and std::shared_ptr/std::make_shared().

std::unique_ptr<SList<std::unique_ptr<Student>> list;
...
list = std::make_unique<SList<std::unique_ptr<Student>>>();
...
list->Add(std::make_unique<Student>());
...
// no need for delete...

Of course, you should prefer not to use dynamic storage at all when you can avoid it.

SList<Student> list; // no need for new...
...
list->Add(Studen()); // no need for new...
...
// no need for delete...

CodePudding user response:

You want to create a SList of pointers in heap and want your variable "list" to point at that list so, I think you need to make that variable a double pointer.

 SList<Student*> **list;
 *list = new SList<Student*>;
  • Related