【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>();
}
相关推荐
rainbow68891 小时前
Linux文件描述符与重定向原理
c++
CodeSheep程序羊2 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
编程小白20262 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
.小墨迹3 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
历程里程碑3 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴3 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6733 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy87874754 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春4 小时前
C++之继承的方式
c++·private·public·protected·继承方式
智者知已应修善业5 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法