做视频网站的备案要求郑州专业网站制作费用报价
做视频网站的备案要求,郑州专业网站制作费用报价,医院网站建设要求是什么,网站 攻击变量#xff0c;指针#xff0c;引用 //拷贝与拷贝构造函数 //拷贝#xff08;copy#xff09;#xff1a;拷贝数据#xff0c;拷贝内存 //始终是在拷贝值#xff0c;但是指针存储的是内存的地址#xff0c;变量存储的是数据的值 //特别注意#xff0c;在引用里面的拷… 变量指针引用 //拷贝与拷贝构造函数 //拷贝copy拷贝数据拷贝内存 //始终是在拷贝值但是指针存储的是内存的地址变量存储的是数据的值 //特别注意在引用里面的拷贝是改变指向,没有复制的操作 #include string
#include iostream//拷贝与拷贝构造函数
//拷贝copy拷贝数据拷贝内存
//始终是在拷贝值但是指针存储的是内存的地址变量存储的是数据的值
//特别注意在引用里面的拷贝是改变指向,没有复制的操作
struct Vector2
{float x,y;};
int main()
{//a,b是两个不同的变量有两个内存地址拷贝的是数据因此a.x2,b.x5Vector2 a{2,3};Vector2 ba;b.x5;//如果分配在堆上用指针则不同 这里的拷贝是拷贝地址的数字指向同一块内存Vector2* cnew Vector2();Vector2* dc;d-x5;std::couta.xstd::endl;std::coutb.xstd::endl;std::cout(*c).xstd::endl;std::cout(* d).xstd::endl;std::cin.get();
} //深拷贝复制整个对象 通过 拷贝构造函数 实现C默认提供一个拷贝构造函数 #include string
#include iostream
//深拷贝复制整个对象 通过 拷贝构造函数 实现C默认提供一个拷贝构造函数
class String
{
private:char* m_Buffer;unsigned int m_Size;
public:String(const char* string)//用指针访问字符串字面量的首地址{m_Size(int)strlen(string);m_Buffernew char[m_Size1];//给一个空间给空终止符memcpy(m_Buffer, string, m_Size);//拷贝的简单化操作m_Buffer[m_Size]0;//此时的长度1后从0开始一共有string1个字符串最后一个是0终止符
//验证// std::coutstrlen(m_Buffer)std::endl;
// std::coutm_Buffer[m_Size-1]std::endl;// for (int i0; im_Size; i) {
// m_Buffer[i]string[i];
// }}//拷贝构造函数//String(const String other)delete;//不允许复制 string2string就会报错//深拷贝String(const String other):m_Size(other.m_Size){std::coutcopystd::endl;m_Buffernew char[m_Size1];memcpy(m_Buffer, other.m_Buffer, m_Size1);//拷贝的简单化操作}~String(){delete [] m_Buffer;//new要用delete因为我们没有用智能指针啦}char operator[](unsigned int index){return m_Buffer[index];}friend std::ostream operator(std::ostream stream,const String string);
};
//打印字符串
std::ostream operator(std::ostream stream,const String string)
{streamstring.m_Buffer;//因为友元的设定属于可以访问m_Buffer然后把字符串流放进stream里return stream;
}void Print(const String string)//如果不是引用传递这里的string会通过拷贝传值多调用copy
{std::coutstringstd::endl;
}int main()
{String stringQingXiao;String string2string;//程序会崩溃。因为这里是char*的拷贝两个指针指向了同一个内存地址在释放的时候会两次调用析构函数第一次后内存已经释放了第二次时对应内存块不属于此程序控制因此程序崩溃string2[2]b;//没有深拷贝函数之前可以看到两个结果都是一样的
// std::coutstringstd::endl;
// std::coutstring2std::endl;Print(string);Print(string2);std::cin.get();//最终运行要按一下回车才会看到崩溃结果
}
建议打断点看运行过程理解
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87840.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!