如何删除传递给函数`foo(new Object())`的对象?

0x4*_*16e 0 c++ oop pointers memory-management

我整天都在寻找这个.所以,C++如果你有这个代码:

#include <iostream>                                                                                                       

struct a {
    int x, y;
    a (int aa = 0, int bb = 0) : x{aa}, y{bb} {
    }
};

void printit (a*);
int main (void) {
    printit (new a {1,3});
    return 0;
}

void printit (a *aa) {
    std::cout << aa->x << " - " << aa->y;
}
Run Code Online (Sandbox Code Playgroud)

如果给我printit ()函数(意味着我无法访问printit()代码)并且printit()不删除对象,有没有办法可以删除我创建的对象?

printit (new a {1,3}); // <--- this object
Run Code Online (Sandbox Code Playgroud)

为了澄清,我的问题是如何在没有附加变量的情况下执行上述操作,并确保已创建的对象已被删除.

son*_*yao 7

你可以从智能指针中寻求帮助.例如

printIt(std::make_unique<a>(1,3).get());
Run Code Online (Sandbox Code Playgroud)

要么

printIt(std::unique_ptr<a>(new a{1,3}).get());
Run Code Online (Sandbox Code Playgroud)

否则,您必须将指针保存在命名变量中,delete稍后再将其保存.