簡體   English   中英

如何將int unique_ptr轉換為void unique_ptr?

[英]How to cast an int unique_ptr into a void unique_ptr?

假設我有一個看起來像的功能

void *func(){
    int *a = new int;
    *a = 1;

    void *b = a;
    return b;
}

在我的主要功能中我可以使用它

int *test = reinterpret_cast<int *>(func());
std::cout << test[0] << std::endl;
delete test;

它會打印出正確的結果。 讓我們說我想使用unique_ptr為我的功能,所以它成為

std::unique_ptr<void> func(){
    std::unique_ptr<int> a(new int);
    *a = 1;

    std::unique_ptr<void> b = a; // does not compile
    return b;
}

它會拋出編譯錯誤

error: conversion from ‘std::unique_ptr<int>’ to non-scalar type ‘std::unique_ptr<void>’ requested

在這種情況下,我該怎么做才能使unique_ptr工作?

unique_ptr持有刪除器 ,負責用於執行delete -expression(或delete[] -expression)上的指針,當的壽命unique_ptr末端。

但是當pvoid* ,表達式delete p是無效的。

因此unique_ptr的默認功能不支持void* 我不確定是否明確禁止或不具有unique_ptr<void> 但是如果它不被禁止,那么試圖定義一個自定義刪除器來完成這項工作,就不會很聰明。

而是修復設計。

不要丟棄類型信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM