【CXX】6.7 SharedPtr<T> — std::shared_ptr<T>

std::shared_ptr 的 Rust 绑定称为 SharedPtr。

限制:

SharedPtr 不支持 T 为不透明的 Rust 类型。对于在语言边界上传递不透明 Rust 类型的所有权,应改用 Box(C++ 中的 rust::Box)。

示例

rust 复制代码
// src/main.rs

use std::ops::Deref;
use std::ptr;

#[cxx::bridge]
mod ffi {
	unsafe extern "C++" {
		include!("example/include/example.h");
		type Object;
		fn create_shared_ptr() -> SharedPtr<Object>;
	}
}

fn main() {
let ptr1 = ffi::create_shared_ptr();
{
    // 创建第二个 shared_ptr,共享同一个对象的所有权。
    // 仍然只有一个 Object,但有两个 SharedPtr<Object>。
    // 两个指针都指向堆上的同一个对象。
    let ptr2 = ptr1.clone();
    assert!(ptr::eq(ptr1.deref(), ptr2.deref()));

    // ptr2 超出作用域,但 Object 尚未被销毁。
}

println!("向 Object 说再见");

// ptr1 超出作用域,Object 被销毁。
}
cpp 复制代码
// include/example.h

#pragma once
#include <memory>

class Object {
public:
Object();
~Object();
};

std::shared_ptr<Object> create_shared_ptr();
cpp 复制代码
// src/example.cc

#include "example/include/example.h"
#include <iostream>

Object::Object() { std::cout << "construct Object" << std::endl; }
Object::~Object() { std::cout << "~Object" << std::endl; }

std::shared_ptr<Object> create_shared_ptr() {
return std::make_shared<Object>();
}
相关推荐
fy zs8 分钟前
网络编程套接字
linux·服务器·网络·c++
fpcc10 分钟前
模板编程—模板和元编程中的错误输出
c++·模板编程
xie_pin_an11 分钟前
C++ 类和对象全解析:从基础语法到高级特性
java·jvm·c++
小温冲冲15 分钟前
C++与QML信号绑定完全指南:实现跨语言无缝通信
c++
GIS 数据栈20 分钟前
【Seggis遥感系统升级】用C++高性能服务Drogon重构软件服务架构|QPS提升300%,性能再升级!
java·开发语言·c++·重构·架构
王老师青少年编程34 分钟前
信奥赛C++提高组csp-s之二分图
数据结构·c++·二分图·csp·信奥赛·csp-s·提高组
柏木乃一35 分钟前
进程(11)进程替换函数详解
linux·服务器·c++·操作系统·exec
Q741_14736 分钟前
C++ 队列 宽度优先搜索 BFS 力扣 429. N 叉树的层序遍历 C++ 每日一题
c++·算法·leetcode·bfs·宽度优先
CSDN_RTKLIB38 分钟前
CMake成果打包
c++
Yu_Lijing1 小时前
基于C++的《Head First设计模式》笔记——工厂模式
c++·笔记·设计模式