c++ - 是否允许自初始化 'A a = a;'?

标签 c++

此代码在运行时在复制构造函数中失败。
但是编译器 (MSVS2008) 没有发出警告。

你能解释一下(最好是引用标准)这段代码是非法的还是什么?

我理解 A a = a;一开始就不应该写, 但我正在寻找理论背景。

 class A
 {
 public: 

    A()
    :p(new int)
    {
    }

    A(const A& rv)
    {
        p = new int(*rv.p);
    }

    ~A()
    {
        delete p;
    }


 private:

    int *p;
 };

 int main()
 {
    A a = a;
 }

最佳答案

您的代码没有调用标准构造函数而是调用复制构造函数,因此您访问的是未初始化的指针。

关于c++ - 是否允许自初始化 'A a = a;'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/981714/

相关文章:

c++ - 使 typedef 不兼容

c++ - boost C++ 单元测试代码覆盖率 TeamCity

c++ - 在执行 SFINAE 时访问模板化派生类 (CRTP) 的静态函数时类型不完整

java - 使用 JNI 在 C++ 和 JAVA 之间进行通信时,我将 "this"保存在哪里?

c++ 除以 0

c++ - 如何隐藏 libfreenect2 的输出消息?

c++ - "Deep"头部依赖分析

c++ - 优化将 std::uint32_t 插入 std::vector<char>

c++ - SDL2_ttf 错误 : Entry point not found

c++ - 使用 bool 谓词函数在 O(N) 时间内对 vector 进行排序