// 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的是指针,所以必须接受指针参数。