小编app*_*Pie的帖子

C++为什么在堆栈中构造对象后立即调用析构函数?

我有两个单元测试.在第一个中,我在堆栈中创建了对象myMovie.创建对象,然后立即调用析构函数.这会导致单元测试失败,因为当myMovie超出范围时,会再次调用析构函数.这会导致访问冲突.

但是,如果我在堆中创建对象,一切正常.为什么在堆栈中构造对象后立即调用析构函数?

第一个是这样的:

TEST_METHOD(constructingMovieWithParametersStack)
    {
        _CrtMemState s1, s2, s3;
        _CrtMemCheckpoint(&s1);
        {
            Movie myMovie = Movie("firstName", "lastName", "title");
            // Why is the destructor is called here???

            string expectedDirectorFirst = "firstName";
            string expectedDirectorLast = "lastName";
            string expectedTitle = "title";
            wchar_t* message = L"movie title wasn't set correctly";
            Assert::AreEqual(expectedTitle, myMovie.getTitle(), message, LINE_INFO());
        }
        _CrtMemCheckpoint(&s2);
        wchar_t* leakMessage = L"there is a leak";
        bool isThereALeak = _CrtMemDifference(&s3, &s1, &s2);
        Assert::IsFalse(isThereALeak, leakMessage, LINE_INFO());
    }
Run Code Online (Sandbox Code Playgroud)

第二单元测试如下:

TEST_METHOD(constructingMovieWithParametersHeap)
    {
        _CrtMemState s1, s2, s3;
        _CrtMemCheckpoint(&s1);
        {
            Movie* myMovie = …
Run Code Online (Sandbox Code Playgroud)

c++ heap stack destructor

2
推荐指数
1
解决办法
134
查看次数

标签 统计

c++ ×1

destructor ×1

heap ×1

stack ×1