比较来自世界各地的卖家的域名和 IT 服务价格

矢量以最佳方法的结构? C++

我正在尝试打开你的结构中的向量。

这是我的结构:


struct Region 
{
bool hasPoly;
long size1;
long size2;
long size3;
long size4;
long size5;
long size6;
//Mesh* meshRef; // the mesh with the polygons for this region
long meshRef;
std::vector<int> PVS;
} typedef Region;


是此广告中的矢量有效,或者将指向向量的指针更合理。 在对向量的指针的情况下,您需要突出显示一个新的向量。 我该如何实现这一目标?

谢!

Edit: 问题是它导致指向错误 xmemory.h, 文件包含在平台中 MSVC++.


void construct/pointer _Ptr, _Ty&amp;&amp; _Val/
{ // construct object at _Ptr with value _Val
::new //void _FARQ */_Ptr/ _Ty/_STD forward&lt;_Ty&gt;/_Val//; // this is the line
}


有趣的是,如果我在结构之外突出显示它并简单地在我使用的功能中,则不会发生这种情况。 有任何想法吗?
</int>
已邀请:

裸奔

赞同来自:

你可以写它 typedef:


struct Region 
{
bool hasPoly;
long size1;
long size2;
long size3;
long size4;
long size5;
long size6;
long meshRef;
std::vector<int> PVS;
}; // no typedef required


回答您的问题:

是本公告中的矢量有效吗?

是的。

或者将指针与向量指向更合理。

不,最有可能没有。 如果您这样做,您必须实现复制构造函数,分配运算符和析构函数以进行复制行为。 最终,你会得到同样的事情,但它将是一个额外的工作,可能会导致错误。

在对向量的指针的情况下,您需要突出显示一个新的向量。 我该如何实现这一目标?

您需要实施

构造函数

复制

, 应用程序运营商

复制I.

析构函数

:


// Copy constructor
Region/const Region &amp; rhs/ :
hasPoly/rhs.hasPoly/,
// ... copy other members just like hasPoly above, except for PVS below:
PVS/new std::vector<int>/*rhs.PVS//
{
}

// Copy assignment operator
Region &amp; operator=/const Region &amp; rhs/
{
if /this != &amp;rhs/
{
hasPoly = rhs.hasPoly;
// ... copy all fields like hasPoly above, except for PVS below:

delete PVS;
PVS = new std::vector<int>/*rhs.PVS/;
}
return *this;
}

// Destructor
Region::~Region//
{
delete PVS;
}


结果:您的代码是按顺序的。 您无需更改任何内容。

EDIT: Fix 作业运营商:查看与此和返回的比较 *this.
</int></int></int>

小明明

赞同来自:

它有一个完整的意义,你不需要
new

没有任何方面,除非您真的想创建一个矢量别名。 另外,你不需要这里的东西
typedef

.

郭文康

赞同来自:

这取决于你如何使用它。

如果要在复制结构时复制向量和数据
Region

, 让它不是指针。

如果您不希望复制它,您需要向向量中指向一些指针。

如果您使用指向向量的指针,则必须非常小心排除异常的安全性/解放。 如果您无法在路上覆盖您的分发安全排除,那么您将留下内存泄漏的可能性。

有几种选择:

确保突出显示向量的代码 /并使用
Region

/, 也释放了向量,并且本身就是一个安全的例外。 它需要这个
Region

我只存在于此代码的动作领域。

您可以执行此操作,只是突出显示堆栈中的向量并将其传递给指针
Region

. 然后确保你永远不会返回对象
Region

在此帧堆栈之上。

您还可以使用一些智能指针。 - > 矢量在你的
Region

.

郭文康

赞同来自:

矢量按顺序。 请记住,如果复制此结构,则将复制向量。 因此,在具有某些性能限制的代码中,我们对待这种结构以及任何其他类型 expensive-to-copy.

在生产代码中,有些人愿意使用关键字
class

, 不是关键词
struct

确定这一课程,作为成员
vector

这不是 POD. 如果您是您自己的风格指南的作者,您无需担心。


typedef

- 这是错误的,只是写
struct Region { stuff };

要回复问题请先登录注册