A(void); // 缺省的无参数构造函数
A(const A &a); // 缺省的拷贝构造函数
~A(void); // 缺省的析构函数
A & operate =(const A &a); // 缺省的赋值函数
String::String(const String &other)
{
// 允许操作 other 的私有成员 m_data
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
}
拷贝构造函数可以在
String a("a");
String b(a);
String c=a;
String d="d"
四种情况被调用
String & String::operate =(const String &other)
{
// (1) 检查自赋值 ,如果相同就返回,否则delete m_data 以后就会无法再进行赋值
if(this == &other)
return *this;
// (2) 释放原有的内存资源
delete [] m_data;
// (3)分配新的内存资源,并复制内容
int length = strlen(other.m_data);
m_data = new char[length+1];
strcpy(m_data, other.m_data);
// (4)返回本对象的引用
return *this;
}
赋值构造函数是在
String a("a")
String b("b");
a=b 的情况使用
同时返回引用的情况一般只在两种情况使用。
1. classname & functon(const classname&xxx)
{
return xxx
}
2. return *this 这种情况,返回自身,其他时候不应该用返回引用
C++11 还有一个移动构造函数 可以传入一个右值 直接把右值内存给当前对象。
也可以std::move转移成右值,掏空内存给对象 减少重建CLASS的操作提高效率
vector 和 map 的 emplace 可以提高效率
vector 可以使用at取数据
map的插入 可以用map.find 判断进行insert
update可以用find后的迭代器更新value
这些函数可以操作无默认构造函数的class