段错误。。。拷贝构造函数未赋值导致得异常

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <iostream>
class B{
    public:
        inline void set( int b){
            m_b = b;
	    }
        inline int get(){
            return m_b;
	    }
    private:
        int m_b;
};

class A{
    public:
        A(){
            m_b = new B;
            std::cout << "A 构造函数" << std::endl;
        }
        A(const A& a){
            this->m_a = a.m_a;//事故点:另一同事写的,此函数起初未赋值,导致找了一天两夜。。。
            this->m_b = a.m_b;//后经找到原同事才点了下。。。
            std::cout << "A 拷贝构造函数" << std::endl;
        }
        inline void set( int a){
            m_a = a;
	    }
        inline int get(){
            return m_a;
	    }
        inline B * getB(){
            return m_b;
	    }
    private:
        int m_a;
        B * m_b;
};

template<typename T>
class Sequence{
    public:
        inline void append( const T& item ){
		    m_data.push_back(item);
	    }
        int size(){
            return m_data.size();
        }
        T& getItem(int i){
            return m_data[i];
        }
    private:
        std::vector<T> m_data;
};

int main(){
    Sequence<A> cax;
    A *a = new A;
    printf("A:%x\n",a);
    a->set(125);
    a->getB()->set(123);
    printf("B:%x\n",a->getB());

    cax.append(*a);
    for(int i = 0;i < cax.size();i++){
        A *p = dynamic_cast<A*>(&cax.getItem(i));
        printf("A:%x,B:%x\n",p,p->getB());
		std::cout << "a:" << p->get() << "b:" << p->getB()->get()<< std::endl;
    }

    return 0;
}

段错误。。。拷贝构造函数未操作导致得异常。

如果将事故点去掉,会

 如果加上事故点,才能正常运行。

 

基础要时常回顾。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值