当前位置: 首页 > news >正文

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

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

限制:

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

示例

// 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 被销毁。
}
// include/example.h

#pragma once
#include <memory>

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

std::shared_ptr<Object> create_shared_ptr();
// 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>();
}

相关文章:

  • 1140:验证子串--next.data()、KMP和find
  • 使用yolov8+flask实现精美登录界面+图片视频摄像头检测系统
  • 代理模式的C++实现示例
  • 15.使用读写包操作Excel文件:OpenPyXL 包
  • 麒麟系统利用pycharm生成deb文件
  • 树莓派上的 TensorFlow Lite:从零开始的摄像头图像识别
  • 深入解析 React Diff 算法:原理、优化与实践
  • 如何逐步迭代衍生出一个网络安全产品
  • Podman 运行redis 报错
  • 警惕!Ollama大模型工具的安全风险及应对策略
  • DataWhale 大语言模型 - GPT和DeepSeek模型介绍
  • Android Studio搭建环境并运行项目
  • Debain-12.9使用xinference部署重排模型/rerank
  • 程序编译生成的文件
  • 面试常见概念区分:并发与并行、同步与异步、阻塞与非阻塞、线程同步与互斥
  • 【MySQL】基本操作 —— DML 与约束
  • HashMap ,HashTable , ConcurrentHashMap 面试
  • C++ primer plus 内存模型和命名空间下
  • OSC32IN与OSC32OUT对于无源晶振而言有区别吗?
  • 数字滤波器的设计实现及应用(论文+仿真)
  • 四大皆空!赛季还没结束,曼城已经吃上“散伙饭”了
  • 《五行令》《攻守占》,2个月后国博见
  • 秦洪看盘|风格有所转变,热钱回流高弹性品种
  • 李成钢:近期个别经济体实施所谓“对等关税”,严重违反世贸组织规则
  • 美国将与阿联酋合作建立海外最大的人工智能数据中心
  • 回望星河深处,唤醒文物记忆——读《发现武王墩》