1. 设计思路
- 结构体定义:定义
ComplexStruct
结构体,包含 int
、float
和 std::string
成员,用于存储不同类型的数据。
- 类定义:在
MyClass
类中定义 memberCallback
成员函数作为回调函数。由于是成员函数,在作为回调使用时需要借助 std::bind
或 std::function
来处理 this
指针。
- 回调触发:在外部创建
MyClass
对象和 ComplexStruct
对象,通过合适的方式调用 memberCallback
并传递 ComplexStruct
对象。
- 生命周期管理:使用智能指针(如
std::unique_ptr
或 std::shared_ptr
)来管理 ComplexStruct
对象的生命周期,避免内存泄漏。
2. 代码实现
#include <iostream>
#include <memory>
#include <string>
// 定义ComplexStruct结构体
struct ComplexStruct {
int intValue;
float floatValue;
std::string stringValue;
};
class MyClass {
public:
// 成员回调函数
void memberCallback(const ComplexStruct& data) {
std::cout << "Int value: " << data.intValue << std::endl;
std::cout << "Float value: " << data.floatValue << std::endl;
std::cout << "String value: " << data.stringValue << std::endl;
}
};
int main() {
// 使用std::unique_ptr管理ComplexStruct对象的生命周期
std::unique_ptr<ComplexStruct> complexData = std::make_unique<ComplexStruct>();
complexData->intValue = 42;
complexData->floatValue = 3.14f;
complexData->stringValue = "Hello, World!";
MyClass myObject;
// 调用成员回调函数并传递ComplexStruct对象
myObject.memberCallback(*complexData);
// std::unique_ptr会在离开作用域时自动释放ComplexStruct对象的内存,避免内存泄漏
return 0;
}
3. 解释
- 结构体
ComplexStruct
:定义了不同类型的成员变量 intValue
、floatValue
和 stringValue
,用于存储数据。
- 类
MyClass
:包含成员函数 memberCallback
,该函数接受一个 ComplexStruct
类型的常量引用参数,输出结构体中的数据。
main
函数:
- 使用
std::make_unique
创建 ComplexStruct
对象,由 std::unique_ptr
管理其生命周期。
- 创建
MyClass
对象 myObject
,调用 myObject.memberCallback
并传递 ComplexStruct
对象。
std::unique_ptr
在离开作用域时会自动调用 ComplexStruct
的析构函数,释放内存,从而避免内存泄漏。如果需要更复杂的共享所有权场景,可以使用 std::shared_ptr
。