在类中声明的C ++ Struct

时间:2014-12-05 04:30:44

标签: c++ arrays class pointers struct

长时间读者第一次发布海报。搜索这个是非常模糊的,所以我找不到任何东西。

Anywho,如果我在类中声明一个struct。然后我有一个类方法创建所述struct的实例,创建的struct实例的生命周期是什么?

例如在我的标题中:

class test_class
{
     Public:
          void test_function(int, string);

     private:
          struct test_struct
          {
               int foo;
               string bar;
          };

          test_struct * storage;
}

然后在test_class.cpp

void test_function(int num, string name)
{
     test_struct t1;
     t1.foo = num;
     t1.bar = name;

     storage = new test_struct [<some_size>];
     storage[<some_element>] = t1;
}

所以,我创建了一个test_class的实例并调用了test_function。创建t1然后成功存储在假设数组中,但它是否保存在数组中?或者当函数退出时它会被删除,因为范围会发生变化吗? t1会成为该类的成员变量吗?我是否需要t1作为指向test_struct的指针并拥有一个test_struct指针数组?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

Lifetime与类定义的嵌套无关。

本声明

 test_struct t1;

声明一个局部变量,其生命周期结束于包含声明的块的右右括号。它声明了一个局部变量,因为它位于函数定义的块中。

本声明

 storage = new test_struct [<some_size>];

动态创建<some_size> test_struct个实例。当你delete[]时,该数组的生命周期结束。如果你这样做。

本声明

storage[<some_element>] = t1;

是复制作业,复制t1的值。它不会创建新实例。


查看SO C++ booklist以查找适合您的C ++教科书。如果可以,请让声誉较高的人帮助您,以便you can read the deleted answers。遗憾的是,现有的社区工作一度被删除,取而代之的是摘要。

答案 1 :(得分:-1)

查看您的问题,看起来您对类中的结构类型感到困惑。如果它有帮助,这里有一点解释 与

      struct test_struct
      {
           int foo;
           string bar;
      };
在课堂上,你刚刚创建了一个封装在课堂内的新类型。 (像任何其他类型一样对待它)。 你的问题的答案 创建1.t1然后成功存储在假设数组中,但它是否保存在数组中?或者当函数退出时它会被删除,因为范围会改变吗?

答案:是的,它会复制到数组中,如上一个答案所述。它是一个复制赋值(逐位复制语义),因此,你的数组元素现在具有从t1复制到它的值

  1. t1会成为班级的成员变量吗?我是否需要t1作为指向test_struct的指针并拥有一个test_struct指针数组?
  2. 答案:t1是一个局部变量(在堆栈上分配),它不是该类的成员变量。在堆上分配存储(新),你有一个test_struct元素数组,然后你只需将本地t1的值复制到你的数组。本质上,在t1超出范围时,在t1被销毁之前,你将t1的值复制到数组。你不需要创建一个指向test_struct的数组,(当然,如果有一些强迫性的原因,在这种情况下你也会为test_struct分配内存)。

    你的&#34;存储&#34;成员在堆上分配,因此,请确保调用delete []来回收内存。

    希望它有所帮助!