从c&tor来调用const成员函数

时间:2016-02-04 13:52:11

标签: c++ constructor const

为什么我不能从c&tor; tor中调用const成员函数? 我试过这段代码: 编译器如何知道* a现在是成员变量?

#include <iostream>
#include <string>
using namespace std;
class A {
  public:
    A():abc(NULL)
   {
     cout<<"c'tor"<<endl;
     f(abc);
   }
   ~A(){}
    void f(float* a) const
    {
        *a=4; //crashed here
    }
    float* getAbc()
    {
        return abc;
    }
     private:
       float* abc;
};

int main()
{
   A a;
   cout<<a.getAbc()<<endl;
   return 0;
}

2 个答案:

答案 0 :(得分:3)

const与此处的问题无关。

问题是由于您解除引用成员abc(尽管通过复制到函数a中的参数f)而没有指向任何内容。您的构造函数将abc设置为NULL

这样做的行为是未定义的。另外,请考虑在较新的C ++标准中使用nullptr

答案 1 :(得分:2)

代码到达时

*a=4;

aNULL。尝试取消引用并使用空指针是未定义的行为。您需要在构造函数中创建new float以使a有效。要做到这一点,只需改变

A():abc(NULL)

A():abc(new float)

如果你这样做,那么你需要实现一个析构函数来删除指针和一个复制构造函数来正确复制它。而不是做所有的事情,你可以不使用指针,只有一个float