首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类数组。堆还是堆?

类数组。堆还是堆?
EN

Stack Overflow用户
提问于 2010-02-19 12:12:26
回答 3查看 343关注 0票数 3
代码语言:javascript
复制
class temp;

temp *t;

void foo() { temp foo2; t[1] = foo2; }

int main() { 
    t = new temp[100];
    foo();
    //t[1] is still in memory?
}
  • 如果我想要一个像这样的类数组,我需要使用指向指针的指针吗?(并对数组中的每个元素使用'new‘) E.G:temp **t;
  • 如果我想做一个100 ptr到ptr的数组,我必须做temp **t = new temp[100][1];是否有更好的方法来做到这一点,不需要4个方括号?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-19 12:15:48

守则:

代码语言:javascript
复制
t = new temp[100];

构造一个类型为temp的数组100对象。做同样事情的更安全的方法是:

代码语言:javascript
复制
std::vector <temp> t(100);

这样您就不必在数组上调用delete[]了。

票数 12
EN

Stack Overflow用户

发布于 2010-02-19 12:29:17

尽量避免新的东西,直到你完全知道你在做什么。

代码语言:javascript
复制
std::vector<temp> t(100);

将以完美的方式完成这项工作。您仍然可以使用[]操作符在解决方案中访问它。

代码语言:javascript
复制
temp foo2; t[1] = foo2;

将调用临时类的赋值运算符。用于将变量传递给函数。

代码语言:javascript
复制
void foo1(std::vector<temp>& lt)
{
}

void foo2(temp& lt)
{
}

foo1(t);
foo2(t[1]);
票数 4
EN

Stack Overflow用户

发布于 2010-02-19 13:10:53

首先,我支持其他人的建议,以避免新的和使用std::向量代替。向量避免了由指针和数组引起的许多麻烦。数组在很大程度上是C解决方案,而不是C++解决方案。

要回答您的问题:这里不需要指针类型。原因是数组自然是由指针寻址的。

当你说t = new temp[100];时,会发生两件事:

  • 从空闲存储区(或“堆”)分配一个新数组
  • t设置为指向新数组的第一个元素。

当您使用p[i]运算符时,它实际上是*(p + i)的语法糖。例如:

  • t[0]等价于*(t + 0),它只是*t,或者t指向的元素:数组的第一个元素。
  • t[1]等同于*(t + 1)。因为t是指向数组的第一个元素的指针,所以t + 1是指向第一个元素的指针:第二个元素。所以*(t + 1)给出了第二个元素。

使用此系统,可以使用temp *指针引用整个temp数组,而不仅仅是一个temp实例。

如果您真的想了解数组和指针,那么您可以做的比阅读常见问题解答的第6章更糟糕。但是,请注意,这是一个C资源,而不是一个C++资源;这是因为在C++中,数组通常不被使用,因为您有一个更好的可用特性: std::vector。我强烈建议您将学习std::vector作为比学习指针和数组更高的优先级。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2296129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档