动态内存分配

时间:2009-02-27 08:15:55

标签: c++ data-structures memory-management

如何为结构数组动态分配内存.... 例如:

class students
{
    struct stud
        {
           int r_no;
           char name[20];
         }*s; 
}

如何为* s动态分配内存......

4 个答案:

答案 0 :(得分:5)

首先,这是这样做的方式,因为你可以使用例如stud的向量。使用您拥有的代码,它将类似于:

class students
{
public:
    struct stud ... *s;
    students() // ctor
    {
        s = new stud[100]; // say you have 100 students
        // from now on you can use s[0], s[1], etc. in the class
    }
};

但是,你应该使用的是一种STL向量或列表:

class students
{
public:
    struct stud ... ;
    std::vector<stud> my_students;
    students() // ctor
    {
        stud aStudent = {0, "Student Name"};
        my_students.push_back(aStudent); // add a new student.
    }
};

答案 1 :(得分:2)

为什么在一个只有指针的类中额外包装结构?

无论如何,在C中你会做这样的事情:

struct stud
{
  int r_no;
  char name[20];
} *s;

size_t num_students = 4711;

s = malloc(num_students * sizeof *s);

然后,谨慎的做法是确保所有这些个性结构都被初始化。

如果你的意思是C ++,你应该编写构造函数来处理它,并使用new []来分配一个结构数组。

答案 2 :(得分:2)

您应该尽可能使用标准组件。这里std :: string和std :: vector可以帮到你。

struct Student
{
    int r_no;
    std::string name;
};
typedef std::vector<Student> StudentList;

通过这种方法,没有必要想知道如何动态分配内存。一切都得到了照顾!

编辑:

我只是输入定义学生列表,因为对我而言,添加更多功能与问题无关。 显然,最后一行可以用真正的类定义替换:

class StudentList
{
    public:
        // Add your own functionalities here
    private:
    std::vector<Student> m_students;
};

答案 3 :(得分:0)

class students
{
public:
  students(size_t noOfStudents):m_noOfStudents(noOfStudents)
   {
     s = new stud[m_noOfStudents];
   }

   ~students()
   {
     delete s;
   }

private: 
   struct stud
        {
           int r_no;
           char name[20];
         }*s; 

   size_t m_noOfStudents;  
}