Monday, December 30, 2019

shared_ptr


#include <iostream>
#include <vector>

using namespace std;

class MyClass
{
public:
        MyClass()
        {
               cout << "MyClass is created" << endl;
        }

        ~MyClass()
        {
               cout << "MyClass is destroyed" << endl;
        }
};

class MyParent
{
public:
        shared_ptr<char> data;
        //char* data;

        MyParent()
        {
               //data = new char[100];
               data = make_shared<char>(100);
               strcpy(data.get(), "haha");
        }

        ~MyParent()
        {
               data.reset();
               //delete data;
        }
};

void* operator new(std::size_t size)
{
        void* storage = malloc(size);
        return storage;
}

void operator delete(void* data)
{
        free(data);
}

int main() {   
        vector<MyParent> vec;

        {
               MyParent parent;                      
               vec.push_back(parent);
        }                     
        return 1;
}



when I use shared_ptr then memory variable 'data' is still alive when we are at 'return 1;'
instead raw pointer (char* data) will be deleted.

{ MyParent parent; vec.push_back(parent); }

because char* data of local variable of parent is trying to free char* data.
Personally I prefer to use raw pointer and try to avoid use value type of MyParent.
If I use a pointer type then

vector<MyParent*> vec;

1 comment:

  1. 안녕하세요, ProgC 님께서 예전에 슬라이드쉐어에 올리셨던 스케일폼 관련 자료를 보다가 문의드리고 싶은게 있어서 연락드립니다. 회사에서 스케일폼 포팅 작업을 하고 있는데 최근 스케일폼의 공식지원이 중단되어서 작업에 어려움을 겪고 있습니다. 혹시 가능하시다면 제 구글 메일 leonardchai 로 연락해 주실 수 있을까요. 다른 연락처를 찾지 못해서 죄송하게도 블로그스팟에 답글을 남기게 되었습니다.

    ReplyDelete

Task in UnrealEngine

 https://www.youtube.com/watch?v=1lBadANnJaw