F10-监视,可以看到s1._str和_s2._str的地址不同,各自拥有各自的空间,实现了深拷贝: 上面实现的是传统的拷贝构造,还有一种现代拷贝构造: 1. //现代的拷贝构造2. string(const string& s)3. :_str(nullptr)4. {5. string tmp(s._str);6. swap(_str, tmp._str);7. } 监视发现,s1._str和s2._...
string对象在进行 拷贝构造 新的String对象时候, 发生了 程序崩溃 ! 由上图可知, 增加了 一个特殊字符‘\0’发生了程序 错误!可见 深拷贝的函数设计存在不足性! --->原因:>strcpy()函数的运用, 其本身存在局限性--->会遇到‘\0’终止拷贝 ! 因此, 在C语言上, 就设计了 一个memcpy函数。 该函数,不会...
写时拷贝是一种优化技术,只有在需要修改时才执行深拷贝,而读取操作仍然共享资源。实现写时拷贝通常需要引用计数来管理资源。 关键点: 引用计数:每个共享资源都有一个引用计数,当一个对象引用该资源时,引用计数增加;当对象销毁时,引用计数减少。 深拷贝触发:当一个对象试图修改共享资源时,如果引用计数大于1,则执行...
std::stringa ="Hello World"; std::stringb = a.c_str();//deep copychar* char_array = (char*)b.c_str(); char_array[0] ='h'; printf("pointer of a: %p\n", a.c_str()); printf("pointer of b: %p\n", b.c_str()); std::cout<< a <<std::endl; std::cout<< b <...
1.浅拷贝 2.深拷贝 ① 浅拷贝:就是让当前的指针指向已存在的区域,和其他指针共同管理同一块空间 下面举一个String类中字符串str的浅拷贝 代码如下: #define _CRT_SECURE_NO_WARNINGS 1 #include<iostream> #include<string.h> using namespace std; ...
c++类的构建-构建自己的string类 深拷贝 成员变量带指针的string类构建 首先看测试案例: #include"string.h"#include<iostream>using namespacestd;intmain(){ Strings1("hello"); Strings2("world"); Strings3(s2);cout<< s3 <<endl; s3 = s1;cout<< s3 <<endl;cout<< s2 <<endl;cout<< s1 <<...
重写了一下String的深拷贝,涉及到编译器给一个类提供的四个默认函数:构造函数,析构函数,拷贝构造函数,赋值运算符=。 如果不显示重写,编译器提供的构造函数和赋值运算符重载都是默认的浅拷贝实现,因此实现深拷贝功能需要我们重写这些函数。 代码如下 #include<bits/stdc++.h>usingnamespacestd;classMyString{private:...
另外深拷贝还有一个简洁版本的,可以避免strcpy的C风格字符串带来的一些容易混淆的地方//string类深拷贝简洁版本class String{private:char* _s;public:String(const char* s = ""):_s(new char[strlen(s) + 1]){strcpy(_s, s);}String(const String& s):_s(NULL){String stmp(s._s);//该临时对象...
▼string的data()和c_str()函数有什么区别? ▼std::to_string()是如何实现的? 常见的string实现方式有两种,一种是深拷贝的方式,一种是COW(copy on write)写时拷贝方式,以前多数使用COW方式,但由于目前多线程使用越来越多,COW技术在多线程中会有额外的性能恶化,所以现在多数使用深拷贝的方式,但了解COW的技术实...