使用特殊值在c ++中初始化对象数组

时间:2011-11-21 03:08:28

标签: c++ arrays null initialization

我是一名中级java程序员,如果objets是通过对内存中的instanced对象的一些引用来初始化的话,我习惯于在java中传递null值。我想在c ++中做类似的事情,但我对如何实现它并不清楚。我想初始化一个用户数组 - user是我定义的类 - 所以我可以检查数组中的实际位置是否包含一个对象,或者它是免费的。

我试图在c ++中使用null定义,但发现它只是一个“-1”int值,我无法正确使用它。所以基本上我需要一些东西来区分我的数组中的自由位置和偶数位置。

此外,我可能有兴趣有一个额外的值来区分包含已删除用户的位置,因为我计划用一个特殊标记标记所需位置作为一个释放位置,当涉及删除一个方法时来自数组的用户。

对于好奇的,我正在实现一个简单的哈希集,我的类中的remove方法只是标记要删除的元素的位置,而不是做一些重构。

2 个答案:

答案 0 :(得分:1)

首先,null定义不是-1而是0.假设你有类似

的东西
class User
{
};

User RemovedClass;

你可以有这样的东西

User *arr[3];
arr[0] = new User();
arr[1] = 0;
arr[2] = &RemovedClass;

此处 0 是新用户, 1 是java null等效, 2 是已删除类的标记。

修改

通常,当您在 java 中看到用户数组时,您必须将其映射到C ++中的 User * 数组。

完成这些操作后。

User a;
User b;
a = b;

在java中,a和b将引用相同的用户。在C ++中,这样的代码将产生a和b引用两个不同的User对象。

答案 1 :(得分:0)

我使用boost :: optional:

boost::optional<int> a;

if (!a) { std::cout << "no a!"; }

a = 5;

if (a) { std::cout << "a = " << *a; }

a = boost::none;

if (!a) { std::cout << "no a!"; }