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();
}
맨마지막거 첫째줄에서 에러 아님 ? test.text();가 아니라
첫째줄?? 자세히좀;;;;
이거 문법에러는 없어 실행하면
처리되지 않은 예외가 0x00F13678 (ConsoleApplication1.exe)에서 발생했습니다 : 0xC0000005 : 위치 0xFEEEFEF2을 읽는 동안 액세스 위반이 발생할했습니다.
이렇게 나와
전체 소스를 올려주세요
저게 거의다에요 memory인크루드하고 Test클래스는 출력하는것밖에 없고 ITest는 Test인터페이스이고 이게 다에요
size 찍어보면 에러나는건 4, 정상실행되는건 8로 나옴.