c++ - C++ 代码中的这个 struct X 有什么问题?

标签 c++ class struct

我把这个问题作为家庭作业。 它按预期编译和运行,但我应该发现它有问题,尽管与 const 无关。

我知道这是一个结构,所以我的变量都是公开的——这不是问题所在。我认为这可能与构造函数中使用的"new"有关。 我很想听听您的想法。

struct X
{
    explicit X(int);
    ~X();
    void Foo();
    void Bar() const;

    int m_a;
    int *m_p;
};

X::X(int a_): m_a(a_), m_p(new int(a_)){}
X::~X()
{
    delete m_p;
    m_p = NULL;
}

void X::Foo()
{
    ++m_a;
    --(*m_p);
}

void X::Bar() const
{
    std::cout<<m_a<<std::endl;
    std::cout<<*m_p<<std::endl;
    std::cout<<m_p<<std::endl;
}

void Fifi(const X& x_)
{
    x_.Bar();
}

int main (void)
{
    X x1(1);
    x1.Foo();
    Fifi(x1);
    return 0;
}

最佳答案

你的类(class)违反了the rule of three .

正如所写的那样,它没有做任何坏事,但是涉及 X 的看似无害的构造可能会导致神秘的错误(由于各种形式的未定义行为)。

X a(1), b = a;

在我的机器上,上面一行导致

*** Error in `./a.out': double free or corruption (fasttop): 0x0000000000dfec20 ***

关于c++ - C++ 代码中的这个 struct X 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46866613/

相关文章:

python 从字符串创建对象

java - 链接到开始按钮的类不会运行

c - 引用结构体值,但不断出现很多错误

swift - 访问类中的结构变量

C++如何使用printf获取 "one digit exponent"

C++ dll循环问题

C++ 成员函数重载选择了错误的函数

c++ - IPv4 和 IPv6 之间的混合模式通信

javascript - 访问大层次结构中的深化元素

c - 在结构体中使用指向动态二维数组的指针