我知道甚至考虑一下并记录下来也是一件很不好的事情:我并不想在任何严肃的应用程序中使用它,因此请尝试回答问题而不是指出它是多么不适当。
我要完成的示例:
class Example {
public:
Example() {
std::cout << "constructor called" << std::endl;
}
~Example() {
std::cout << "destructor called" << std::endl;
}
// some operator delete magic perhaps?
};
int main() {
Example* example_pointer;
{
Example example; // prints "constructor called"
example_pointer = &example;
} // example still exists here, nothing is printed
delete example_pointer; // deleting automatic variable manually
// Prints "destructor called"
return 0;
}
编辑:唯一的要求是主要功能不应更改。
我意识到有些事情根本不可能实现,因此在这种情况下我不会哭。我只是出于好奇才想到了这个问题。
最佳答案
不要在家中尝试此操作,但您可以使用计数为PIMPL的引用和重载的operator&
来实现以下目的:
class ExampleImpl {
public:
ExampleImpl() {
std::cout << "constructor called" << std::endl;
}
~ExampleImpl() {
std::cout << "destructor called" << std::endl;
}
};
class Example {
std::shared_ptr<ExampleImpl> impl;
public:
Example() : impl(std::make_shared<ExampleImpl>()){}
Example* operator&() { return new Example(*this); }
};
Live demo。
关于c++ - 有没有办法防止自动变量删除?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40559794/