// Demo.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <string>
#include <vector>
#include <memory>
using namespace std;
struct destination {
const char *des;
};
struct connection {
int ip;
};
connection connect(destination &d) {
string des(d.des);
int IP = stoi(des);
connection c{ IP };
return c;
}
void disconnect(connection &c) {
c.ip = 0;
}
void end_connection(connection *cp) {
cout << "Call disconnect to end connection" << endl;
disconnect(*cp);
}
int main()
{
destination d{ "102" };
connection c = connect(d);
shared_ptr<connection> p(&c, end_connection);
// 使用lambda表达式
// shared_ptr<connection> p(&c, [](connection *c) {cout << "end connection" << endl; (*c).ip = 0; });
return 0;
}
注意end_connection的参数必须是指针类型,看起来shared_ptr在释放资源时,传递给deleter的是指针,所以必须接受指针参数。
本文介绍了一个C++示例程序,演示了如何使用智能指针(shared_ptr)来管理动态分配的资源,并自定义删除器(end_connection)以实现资源的正确释放。通过lambda表达式和自定义函数,展示了不同方式下资源释放的过程。
968

被折叠的 条评论
为什么被折叠?



