构造函数没有被调用?

Kai*_*aan 2 c++ constructor visual-studio-2010

我一直在盯着我的代码,我无法弄清楚为什么我的构造函数不会被调用.

它完全忽略了我的构造函数(我已经检查过调试器).

这是我的testapp:

using namespace MyEngine;

int _tmain(int argc, _TCHAR* argv[])
{
    TestManager* testMgr = new TestManager();
    testMgr->RunAllTests();

    delete testMgr;

    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

TestManager.h:

namespace MyEngine
{

    class TestManager 
    {
    public:
        TestManager();
        TestManager(uint64_t RepeatTimes);
        ~TestManager();

        bool RunAllTests();

        bool RunMemoryTests();

    private:
        Engine* mEngine;
        ILogManager* mLogger;

        MemoryTestManager* mMemTestMgr;
        uint64_t mRepeatTimes;

    };

}
Run Code Online (Sandbox Code Playgroud)

和TestManager.cpp

namespace MyEngine
{

    TestManager::TestManager()
    {
        TestManager(1);
    }

    TestManager::TestManager(uint64_t RepeatTimes)
    {
        if (RepeatTimes>0)
            mRepeatTimes = RepeatTimes;
        else 
        {
            mRepeatTimes = 1;
        }

        mEngine = Engine::GetEngine();
        mMemTestMgr = new MemoryTestManager();
    }

    TestManager::~TestManager()
    {

    }


    /* Runs all testing modules */
    bool TestManager::RunAllTests()
    {
        bool res = true;

        /* Init Engine */
        if(mEngine->Init(0,0,0))
        {
            res = true;
            res && mEngine->GetRenderManager()->Init();
            res && mLogger->Init(true,true);
            res && mEngine->GetMemoryManager()->Init(false);

        }
        else
            return false;

        /* Start Engine */
        mEngine->Start();

        /* Get logger */
        mLogger = mEngine->GetLogger();

        /* Run Memory Tests */
        res &= RunMemoryTests();

        if (res)
            mLogger->LogInfo("TEST: TESTING SUCCESSFULL");
        else
            mLogger->LogError("TEST: TESTING FAILED");

        return res;
    }

    /* Runs all memory tests */
    bool TestManager::RunMemoryTests()
    {
        bool res = true;

        res &= mMemTestMgr->AllocateTest();
        res &= mMemTestMgr->ReferenceTest();

        if (res)
            mLogger->LogInfo("TEST: RunMemoryTests SUCCESSFULL");
        else
            mLogger->LogError("TEST: RunMemoryTests FAILED");

        return res;
    }

}
Run Code Online (Sandbox Code Playgroud)

ral*_*nja 5

你不能从同一个类调用另一个构造函数.我将init代码重构为一个单独的方法,并从两个构造函数中调用它:

namespace MyEngine
{

    TestManager::TestManager()
    {
        Init(1);
    }

    TestManager::TestManager(uint64_t RepeatTimes)
    {
        Init(RepeatTimes);
    }

    void TestManager::Init(uint64_t RepeatTimes)
    {
        if (RepeatTimes>0)
            mRepeatTimes = RepeatTimes;
        else 
        {
            mRepeatTimes = 1;
        }

        mEngine = Engine::GetEngine();
        mMemTestMgr = new MemoryTestManager();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,你*可以*,但它是一个不同的语法,它是C++ 11中的一个新功能("委托构造函数"). (3认同)