草庐IT

unique_token

全部标签

c++ - 如何将 unique_ptr 移动到原始指针?

我有一个函数,用于分配给定大小的缓冲区。缓冲区将在返回前预处理/填充一些数据。此预处理可能会返回false以表示此缓冲区未正确处理。所以我想在这个缓冲区上应用RAII以避免在没有delete[]的情况下提前返回通常我使用unique_ptr帮助我自动释放本地分配的对象。在这种情况下,我需要返回这个分配的对象(由unique_ptr拥有)并将所有权转移给调用者。但是编译器提示我无法转换unique_ptr至T*而我std::moveunique_ptr.看起来像unique_ptr只能移动到另一个unique_ptr而不是原始指针。有什么方法可以从unique_ptr转移所有权吗?到ra

c++ - 为什么 std::unique_ptr 没有像 std::shared_ptr 那样的别名构造函数?

我刚刚发现std::shared_ptr的“别名构造函数”并发现自己在问“为什么std::unique_ptr没有相应的构造函数?也就是说,如果你想分配一个Foo这样你就可以传递它的Bar应该完全管理Foo生命周期的函数的成员,能够这样做不是很好吗?#includestructB{}structA{Bb;}voidf(std::unique_ptrb);std::unique_ptra=std::make_unique();std::unique_ptrb{std::move(a),&(a->b)};//anowinvalid.f(std::move(b));//fnowrespons

c++ - 在为它分配新值之前应该将 `nullptr` 分配给 `std::unique_ptr` 吗?

#include#includeusingnamespacestd;intmain(){std::unique_ptrptrA=std::make_unique(10);ptrA=std::make_unique(20);//caseIreturn0;}#include#includeusingnamespacestd;intmain(){std::unique_ptrptrA=std::make_unique(10);ptrA=nullptr;//caseIIorptrA.reset()ptrA=std::make_unique(20);return0;}我见过很多人使用CaseII

c++ - 为什么 std::unique_ptr 没有 const get 方法?

我知道std::unique_ptr是这样的,可能不会改变以破坏向后兼容性,但我想知道是否有人有充分的理由说明规范的作者没有这样做'用看起来像这样的const变体重载get方法constT*get()const;遵循unique_ptr为const的意图。我最好的猜测是它试图镜像指针并像T*const而不是典型的类。作为后续问题,如果我想在类的const实例中以类似const的方式保存指针,我是否应该使用std::unique_ptr以外的其他东西来保存数据?更新在我的例子中,我想保护自己不在类本身中滥用指针。我正在编写一个const移动构造函数MyClass(constMyClass

c++ - Tokens 的作用是什么以及为什么需要在 C++ 编程中创建它们?

我正在读一本书(BjarneStroustrup的《编程原理与实践》)。他在其中介绍了代币:“token是一个字符序列,代表我们认为是一个单位的东西,例如数字或运算符。这就是C++编译器处理其源代码的方式。实际上,以某种形式“标记化”是大多数文本分析的开始方式。”classToken{public:charkind;doublevalue;};我确实明白它们是什么,但他从未详细解释过这一点,这让我很困惑。 最佳答案 标记化对于弄清程序功能的过程很重要。Bjarne所指的与C++源代码相关的是程序含义如何受到标记化规则的影响。特别是,

使用apifox配置全局token

文章目录1.接口导入2.配置全局token首先安装好apifox软件,附上官方下载地址[官网](https://www.apifox.cn/)。1.接口导入首先需要新建自己的项目。进入自己的项目,点击“导入数据”按钮,点击“新建数据源”按钮配置数据源参数(前提需要有能访问到的数据源URL),接口部分可以新建模块,尽量不要把所有的接口全部放在根目录下面。完成之后,点击立即导入。如果服务正常,就可以导入工程中的接口。截一个我先前导入的接口样例。2.配置全局tokenToken方式是将登录凭证放在接口请求参数里(通常会放在Header)。常见的有BasicAuth、BearerToken、APIKe

c++ - 如果我返回一个 unique_ptr,原始对象会被删除吗?

我想做这样的事情:unique_ptrMyFunc(){MyObj*ptr=newMyObj();...returnunique_ptr(ptr);}unique_ptrvalue=MyFunc();但我不确定在函数返回后临时值被销毁时对象是否会被删除。如果是这样,我应该如何正确实现返回unique_ptr的函数? 最佳答案 不,当函数作用域结束时,对象不会被删除。这是因为unique_ptr的move构造函数会将所有权语义“移动”到新的unique_ptr对象,并销毁旧的unique_ptr不会导致删除分配的对象。注意:这不是正确

c++ - Unique_ptr 的 STL vector - 如何重置?

我创建了两个标准的unique_ptrvector:std::vector>students;std::vector>teachers;然后,我创建一个新对象并将其放入vector中:students.push_back(std::unique_ptr(newStudent()));teachers.push_back(std::unique_ptr(newTeacher()));完成所有操作后,如何删除vector?Whitoutunique_ptr我不得不做一个循环并删除每个对象:while(!students.empty()){deletestudents.back();stud

c++ - 继承 : expected class-name before ‘{’ token

我试图在C++中创建一个异常类,但它不起作用。我已将代码减少到最少,但仍然找不到错误。这是我的头文件:#ifndefLISTEXCEPTION_H#defineLISTEXCEPTION_H//C++standardlibraries#include/*CLASSDEFINITION*/classListException:publicexception{};#endif//LISTEXCEPTION_H这是我得到的错误:error:expectedclass-namebefore‘{’token这是出乎意料的。我该如何解决这个问题? 最佳答案

c++ - 在公共(public)成员函数中返回私有(private) unique_ptr

考虑以下类原型(prototype):classObjHandler{std::unique_ptrGetPtr(){returnobj;}private:std::unique_ptrobj;};这会生成一个编译时错误,说明std::unique_ptr的复制构造函数已被删除。为什么这里不应用移动语义?是否与GetPtr()不拥有obj指针有关?我应该如何实现我的代码(我需要一个成员函数以最小的开销返回一个指向流的拥有指针)? 最佳答案 unique实际上意味着“独特的所有权”。创建所有权的拷贝是没有意义的,因为那样它就不再是唯一