如何对对象数组元素使用运算符?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何对对象数组元素使用运算符?相关的知识,希望对你有一定的参考价值。

我的主要问题是我想检查对象列表中的元素是否为空。

如果我使用这个方法,我不会得到任何错误。

class A;
A *pointer = new A;
pointer = NULL;

但我需要对对象数组元素做同样的事情。当我使用下面的代码时,我得到了错误。

    class A;
A* pointer = new A[2];
pointer[0] = NULL;

错误在于没有操作符"="匹配这些操作数。我不能使用"="操作符。

 if(!ptr[0])

也不是。

答案

对于你的问题,可以这样做

A* ptr[10] = {new A} // notice the [] after ptr

ptr中的所有其他索引将自动获得nullptr。但是你也可以做

ptr[2] = nullptr;
ptr[3] = new A;

当然

if(ptr[4] == nullptr){/*Your stuff*/}
另一答案

看了大部分的评论,我还是不能100%确定你想要什么。如果你正在寻找一个对象列表,其中每个对象可以是存在的,也可以是不存在的,你可以使用指针数组,但这在现代C++中有点可怕。另一种方法是用一个向量 std::optional

// create vector with 2 empty elements
std::vector<std::optional<A>> a(2);
// if a[0] is empty create one
if(!a[0])
    a[0] = A();
//or set to null
a[0] = std::nullopt;

每一个元素都可以有一个值或没有,你不必在指针上做文章。另一种选择是一个由以下元素组成的向量 std::uniqe_ptr

// create vector with 2 empty elements
std::vector<std::unique_ptr<A>> a(2);
// if a[0] is empty create one
if(!a[0])
    a[0].reset(new A());
// or set it to null 
a[0] = nullptr;

这两个选项都可以让你检查元素是否存在,最重要的是,这两个选项都可以清理创建的对象。哪一个选项最适合哪种情况,由读者决定。

另一答案

像这样创建指向对象的指针数组。

A* pointer[2];

然后

 pointer[0] = new A();
pointer[0]=nullptr;
 if(!pointer[0])

以上是关于如何对对象数组元素使用运算符?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用扩展运算符将对象数组推入特定元素

如何使用 ES6 扩展运算符和剩余运算符从数组或对象中删除特定元素

在对象数组上使用扩展运算符来访问元素[重复]

出现错误:二元运算符“==”不能应用于两个“x”操作数,如何删除此对象数组中的某些元素

JavaScript单行代码,也就是代码片段

如何对 NumPy 数组执行逐元素布尔运算 [重复]