如何k掉别人的网站,自助小站,网站建设所需硬件参数,wordpress 个人支付1.对象存储
1)栈存储#xff1a;
对于局部对象#xff0c;它们存储在栈上。当进入包含对象定义的代码块时#xff0c;对象被创建并压入栈中。
例如#xff1a;
class fun {
public:
int a;
};
void func() {
fun A; // 对象存储在栈上#xff0c;随着函数结束自动销毁…1.对象存储
1)栈存储
对于局部对象它们存储在栈上。当进入包含对象定义的代码块时对象被创建并压入栈中。
例如
class fun {
public:
int a;
};
void func() {
fun A; // 对象存储在栈上随着函数结束自动销毁
A.a 10;
}
栈存储的对象生命周期由其所在的作用域决定作用域结束时对象自动销毁不需要手动释放内存。
2)堆存储
使用 new 运算符在堆上动态分配对象。
例如
class fun {
public:
int a;
};
int main() {
fun* p new fun(); // 在堆上分配对象
p-a 20;
// 记得使用delete来释放内存
delete p;
return 0;
}
这种方式可以根据程序运行时的需求灵活分配内存但需要手动使用 delete 来释放内存避免内存泄漏。
对象恢复
2.序列化和反序列化
1)序列化是将对象的状态转换为可以存储或传输的格式比如转换为字节流。可以通过重载
例如将一个包含基本数据类型成员的类对象序列化为一个文本格式
#include iostream
#include fstream
class fun {
public:
int a;
friend std::ostream operator(std::ostream os, const fun obj) {
os obj.a;
return os;
}
};
int main() {
fun obj;
obj.a 30;
std::ofstream file(a.txt);
file obj; // 将对象状态序列化到文件
file.close();
return 0;
}
2)反序列化是从存储或传输的格式中恢复对象状态。可以通过重载 运算符来实现简单的反序列化。
例如从之前存储的文本文件中恢复对象状态
#include iostream
#include fstream
class fun {
public:
int a;
friend std::istream operator(std::istream is, fun obj) {
is obj.a;
return is;
}
};
int main() {
fun obj;
std::ifstream file(a.txt);
file obj; // 从文件反序列化对象状态
std::cout Recovered a: obj.a std::endl;
file.close();
return 0;
}
3.对象复制和移动语义
1)复制可以通过定义拷贝构造函数来复制对象。
例如
class fun{
public:
int a;
MyClass(const fun other) {
a other.a;
}
};
int main() {
fun obj1;
obj1.a 40;
fun obj2 obj1; // 调用拷贝构造函数复制对象
std::cout obj2 a: obj2.a std::endl;
return 0;
}
2)移动C11引入了移动语义通过移动构造函数和移动赋值运算符来高效地转移资源的所有权。
例如对于一个管理动态分配内存的类
#include iostream
#include utility
class MyString {
public:
char* buffer;
MyString() : buffer(nullptr) {}
MyString(const char* str) {
buffer new char[strlen(str)1];
strcpy(buffer, str);
}
MyString(MyString other) noexcept {
buffer other.buffer;
other.buffer nullptr;
}
MyString operator(MyString other) noexcept {
if (this! other) {
delete[] buffer;
buffer other.buffer;
other.buffer nullptr;
}
return *this;
}
~MyString() {
delete[] buffer;
}
};
int main() {
MyString str1(Hello);
MyString str2 std::move(str1); // 调用移动构造函数
std::cout str2: str2.buffer std::endl;
return 0;
}