[英]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
末端。
但是當p
是void*
,表達式delete p
是無效的。
因此unique_ptr
的默認功能不支持void*
。 我不確定是否明確禁止或不具有unique_ptr<void>
。 但是如果它不被禁止,那么試圖定義一個自定義刪除器來完成這項工作,就不會很聰明。
而是修復設計。
不要丟棄類型信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.