如何对对象数组元素使用运算符?
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 扩展运算符和剩余运算符从数组或对象中删除特定元素