use SafeManuallyDrop::AlwaysSafePanicManuallyDrop as ManuallyDrop;
#[derive(Default, Debug)]
struct ControlDrop(usize);
#[derive(Default)]
struct MyLogicData {
data: ManuallyDrop<ControlDrop>
}
impl MyLogicData {
pub fn ignore_mylogic_and_getdata(mut self) -> ControlDrop {
let data = unsafe {
ManuallyDrop::take(&mut self.data)
};
ManuallyDrop::forget(self);
data
}
}
impl Drop for MyLogicData {
fn drop(&mut self) {
println!("MyLogicData, indata: {:?}", self.data);
unsafe {
ManuallyDrop::drop(&mut self.data);
}
}
}
fn main() {
{
let indata = MyLogicData::default();
drop(indata);
}
{
let indata = MyLogicData::default();
let cd_data = indata.ignore_mylogic_and_getdata();
println!("ignore_mylogic: {:?}", cd_data);
}
}