【问题标题】:Questions regarding references and pointers关于引用和指针的问题
【发布时间】:2019-01-11 14:08:50
【问题描述】:

考虑这个简单的类:

class Test {
public:
    Test() { data = 0; };
    Test(int integer);
    int getData() { return data; }
    ~Test();
private:
    int data;
};

如果我写:

Test t = *new Test;

是否会在堆上创建一个新的Test 对象,然后将其复制到临时Test 对象t?还会有内存泄漏吗?

还有为什么这无效?

Test* t = new Test(0);
int i = *t.getData();

但这不是:

Test* t1 = new Test(0);
Test& t2 = *t1;
int i = t2.getData();

我知道我可以简单地做t->getData(),但我不明白为什么上面的例子不起作用?

【问题讨论】:

  • 您可以使用 (*t).getData() 之类的东西,因为 *t.getData 将尝试在函数 getData 返回时应用 operator*

标签: c++ pointers reference


【解决方案1】:

是否会在堆上创建一个新的 Test 对象,然后将其复制到临时 Test 对象 t 中?还会有内存泄漏吗?

是的,是的。


还有为什么我不能这样做:

member of object access operator (.) 的优先级高于 *。你可以(*t).getData()

【讨论】:

  • 您是会员访问操作员。
  • 你是vector<bool>
【解决方案2】:

还有为什么我不能这样做:

Test* t = new Test(0);
int i = *t.getData();

您不能这样做,因为. 的优先级高于*。您可以使用() 明确地对操作进行排序,也可以使用->,这是一个内置的速记运算符:

int i = t->getData();

【讨论】:

    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多