【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>();
}
相关推荐
lpfasd1237 小时前
node-sass 停止维护!老项目迁移 Dart Sass 完整教程
前端·rust·sass
所以遗憾是什么呢?7 小时前
【题解】Educational Codeforces Round 195 (Rated for Div. 2) ABCDE
c++·动态规划·acm·icpc·ccpc·xcpc·codeforecs
Flynt8 小时前
我把真实的 ES 查询怼到 7059 星的 Rust 搜索引擎上:1366/1369 的兼容承诺,裂了 3 个缝
elasticsearch·搜索引擎·rust
Lhan.zzZ9 小时前
Qt WebEngineView 在 Linux 上无法加载网页:从“看不见 HTML“到“禁用沙箱“
linux·c++·qt
小杍随笔10 小时前
egui 0.37 升级实录:卡顿修复与5倍性能回退
windows·rust·egui
sysu_chenxy10 小时前
二重循环输出二维图形
c++
划破黑暗的第一缕曙光12 小时前
[C++]:2.类和对象(下)
c++·类和对象·对象·类
黎相思13 小时前
LRU Cache
c++·缓存
UIU11413 小时前
P1003 [NOIP 2011 提高组] 铺地毯
数据结构·c++·算法
xxwl58515 小时前
区域赛算法模版第四章---数据结构
数据结构·c++·算法