热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C++智能指针混乱

如何解决《C++智能指针混乱》经验,为你挑选了1个好方法。

据我所知,在C++领域,它主张使用智能指针.我有一个简单的程序如下.

/* main.cpp */
#include 
#include 
using namespace std;

/* SQLite */
#include "sqlite3.h"

int main(int argc, char** argv)
{
    // unique_ptr db = nullptr; // Got error with this
    shared_ptr db = nullptr;

    cout <<"Database" <

当我使用unique_ptr行编译时得到一条错误消息:

error C2027: use of undefined type 'sqlite3'
 error C2338: can't delete an incomplete type

当我使用shared_ptr行编译时,它是成功的.从几个问题和答案我的理解是unique_ptr应该是首选,因为我不打算让对象共享资源.在这种情况下,最佳解决方案是什么?使用shared_ptr还是回到裸指针(new/delete)的旧方法?



1> StoryTeller ..:

一般的方法是@ SomeProgrammerDudes的答案(接受它).但为了解决你的担忧,我发布了这个.

你不应该回到raw new并删除.既不是因为sqlite3是不透明的类型,也不是因为它的开销std::shared_ptr.您使用,作为指定的另一个答案,a std::unique_tr.

唯一的区别是您如何设置自定义删除器.因为std::unique_ptr它是类型定义的一部分,而不是运行时参数.所以你需要做这样的事情:

struct sqlite3_deleter {
  void operator()(sqlite3* sql) {
    sqlite3_close_v2(sql);
  }
};

using unique_sqlite3 = std::unique_ptr;


推荐阅读
author-avatar
justmoon999
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有