类中的引用对象和其他引用对象
Reference Objects Within Classes, and other reference objects
最近我对一些概念感到困惑,所以我想确保我知道回答这些问题的正确方法,以下是我得到的
class Bar
{
// stuff here
};
class Foo
{
private:
Bar* bar;
Bar* arr;
public:
void setBar(Bar*);
void setArr(Bar*, int);
Foo();
};
Foo::Foo()
{
arr = new Bar[10];
}
void Foo::setBar(Bar* bar)
{
this->bar = bar;
}
void Foo::setArr(Bar* bar, int element)
{
// i did not test this to see if it worked so if i have incorrect syntax, im meaning to have an allocated array of Bar pointer objects
this->arr[element] = bar;
}
int main()
{
Foo foo();
Bar* bar = new Bar();
foo.setBar(bar);
Bar* bar2 = new Bar();
foo.setArr(bar2, 4);
}
1) 如果我在main中执行这个命令"delete bar",它会删除foo类中对bar的引用吗?
2) "delete bar2"也是如此,它删除了对foo类中allcoated数组中bar对象的引用吗?
3) 由于我将Foo声明为Foo-Foo(),而不是Foo*Foo=new Foo(),由于它不是一个分配的对象,我无法删除它(据我所知),所以类中的任何引用都会超出范围吗?
4) 我想我可能弄错了语法,因为我在记事本上这样做了,我怎么能分配一个分配的Bar对象数组,Bar指针数组?所以arr的每个数组元素都是一个Bar*,我可以稍后在解构器中删除它
5) 假设我确实做了Foo*Foo=new Foo();,如果我删除了foo,我想引用会保留下来,除非我在构造函数中处理它们?
我想这就是我剩下的所有问题,我只需要澄清一下,提前谢谢各位!
问题:
1) 如果我在main中执行这个命令"delete bar",它会删除foo类中对bar的引用吗?
是的。危险在于现在foo
对象有一个悬空指针。
问题:
2) "delete bar2"也是如此,它删除了对foo类中allcoated数组中bar对象的引用吗?
同样的事情。对危险在于现在foo
对象有一个悬空指针。
问题:
3) 一旦我将
Foo
声明为Foo foo()
而不是Foo* foo = new Foo()
,由于它不是分配的对象,我就无法删除它(据我所知),那么类中的任何引用都会超出范围吗?
线路
Foo foo();
不创建对象。它声明了一个不带参数的函数foo
,并返回一个Foo
。请参阅Most Vexing Parse的目的是什么?了解更多详细信息。
要创建对象,请使用:
Foo foo;
或
Foo foo{};
说到您的问题,当对象超出范围时,通过调用析构函数来释放对象使用的资源。在这种情况下,当程序从main
返回时,对象将超出范围。
问题:
4。。。。。。如何分配已分配的
Bar
对象数组和Bar
指针?所以arr的每个数组元素都是一个Bar*
,我可以稍后在解构器中删除它
在arr
被声明为类型Bar*
的情况下,arr
的每个元素都可以是对象,即Bar
,而不是指针。您可以使用:
arr[0] = Bar{};
你不能使用:
arr[0] = new Bar;
问题:
5) 假设我确实做了Foo*Foo=new Foo();,如果我删除了foo,我想引用会保留下来,除非我在构造函数中处理它们?
这没有道理。我想你的意思是说"除非我在建造师里照顾他们?"
这是正确的。
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- C++对象引用返回不同的值
- 对象引用中的字段以不同的方法返回不同的值
- 通过向构造函数其他对象引用页面来创建对象
- 为什么在对象引用恒定时允许更改为另一个类的指针的成员变量
- 如何在C++中读取 HDF5 对象引用
- C++ 未定义的对象引用
- 从函数返回 libconfig 类设置对象引用
- qt vsaddin错误对象引用未设置为对象的istanse
- 在这种情况下,为什么使用 *此必需的对象引用返回对象引用
- 基本C - 构造contaning对象引用,并将其作为方法参数传递
- C :将对象引用作为参数给出错误:呼叫class :: function()的匹配函数
- C++OOP基础知识-是否正确返回对象引用
- 使用对象引用(可能)在调用destructor后使用对象引用
- 创建返回对象引用的成员函数的最简单方法
- 如何在C++上使用对象引用删除对象
- JNI/Android NDK-维护全局对象引用
- 为什么有些类方法返回"*this"(self的对象引用)?
- 在C++中返回伪对象引用的规则