1. std::make_shared<Test>()->text();//가능


2. std::shared_ptr<ITest> test = std::make_shared<Test>();

    test->text();//가능


3. std::shared_ptr<ITest> test = std::make_shared<Test>();

    ITest& itest = *test;

    itest.text();//가능


4. std::shared_ptr<Test> test = std::make_shared<Test>();

    test->text();//가능


5. std::shared_ptr<Test> test = std::make_shared<Test>();

    ITest& itest = *test;

    itest.text();//가능


6. void TT(ITest& test){

test.text();

    }

    TT(*(std::make_shared<Test>()));//가능



7. ITest& test = (*(std::make_shared<Test>()));

    test.text();//에러


1에서 6까지는 다 되는데 7번만 안되는데 누가 설명좀......



ITest.h


#ifndef ITEST_H

#define ITEST_H


class ITest

{

public:

ITest(){}

virtual ~ITest(){}

virtual void text() = 0;

};


#endif



Test.h


#ifndef TEST_H

#define TEST_H


#include "ITest.h"


class Test : public ITest

{

public:

Test();

~Test() override;

void text() override;

};


#endif


Test.cpp


#include "Test.h"

#include <iostream>


Test::Test()

{


}

Test::~Test()

{


}

void Test::text()

{

std::cout << "test" << std::endl;

}



main.cpp


#include "Test.h"

#include "ITest.h"

#include <memory>


void TT(ITest& test);


void main()

{

//std::make_shared<Test>()->text();


//std::shared_ptr<ITest> test = std::make_shared<Test>();

//test->text();


//std::shared_ptr<ITest> test = std::make_shared<Test>();

//ITest& itest = *test;

//itest.text();


//std::shared_ptr<Test> test = std::make_shared<Test>();

//test->text();


//std::shared_ptr<Test> test = std::make_shared<Test>();

//ITest& itest = *test;

//itest.text();


//TT(*(std::make_shared<Test>()));


ITest& test = *(std::make_shared<Test>());

test.text();

}


void TT(ITest& test)

{

test.text();

}