有没有办法防止自动变量删除

有没有办法防止自动变量删除

我知道甚至考虑一下并记录下来也是一件很不好的事情:我并不想在任何严肃的应用程序中使用它,因此请尝试回答问题而不是指出它是多么不适当。



我要完成的示例:

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/

10-10 02:57