构造函数上的C ++向量释放

时间:2012-08-10 15:57:42

标签: c++ vector constructor size

抱歉,我没有时间对此进行编码,希望我的解释足够彻底。我的一个类有一个vector作为私有成员变量,它的大小在它的构造函数中声明。

现在,我从调试中发现,虽然向量确实在构造函数中分配了它的大小,但是当构造函数返回时它会丢失所有内容(就好像它的内存分配仅在构造函数的范围内一样,即使向量是它的成员变量之一。它又回到了一个空向量)我需要我的向量来保持它的大小超过构造函数的执行,并且想知道我可以做些什么来解决这个问题,因为我初始化它的元素在我的其他一个函数中使用字符串。

追加评论内容

std::vector< std::vector< std::string > > routeInfo(
    routeNum, std::vector< std::string >( 2 ) );
  

这是构造函数中的向量声明,routeNum是一个   在构造函数中较早初始化的变量(已初始化)   没错,那不是问题。)

2 个答案:

答案 0 :(得分:3)

我必须从你的代码中假设你不知道如何在c ++中初始化成员变量。这是正确的方法:

class Myclass
{
// the declaration of the variable:
std::vector< std::vector< std::string > > routeInfo;

// declaration of the constructor:
Myclass(int routeNum);
};

// definition of the constructor
Myclass::Myclass(int routeNum)
  : routeInfo(routeNum, std::vector< std::string >( 2 ))
{
  // some other code
}

如果你只是写:

Myclass::Myclass(int routeNum)
{
std::vector< std::vector< std::string > > routeInfo(
    routeNum, std::vector< std::string >( 2 ) );
}

这将创建另一个routeInfo变量,它隐藏了构造函数中的原始变量。要访问成员变量,您必须编写this->routeInfo而不是routeInfo,这仍然是零长度。

答案 1 :(得分:0)

听起来像你在某种程度上在你的代码中的某个地方分配了一个向量(或者在你没有指定向量大小的情况下用另一个对象分配)。

如果正确指定了大小,则矢量本身不应更改大小。虽然要检查一件事:

您是否指定了最大容量,或者是否使用保留指定了当前容量?如果您调用reserve,向量应扩展到您分配的空间并保持不变,直到超过它或明确请求更改大小。