shared_ptr로 생성한 변수를 다른 함수의 매개변수로 넘길 때 신경 써야 할 부분이 있음
#include "pch.h"
#include <iostream>
#include <thread>
#include <Windows.h>
#include <chrono>
void Func(std::shared_ptr<int> shared)
{
//std::cout << *shared << std::endl;
}
void RefFunc(std::shared_ptr<int>& shared)
{
//std::cout << *shared << std::endl;
}
int main()
{
std::shared_ptr<int> shared = std::make_shared<int>(3);
auto time = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 10000000; i++)
{
Func(shared);
}
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - time).count() << std::endl;
time = std::chrono::high_resolution_clock::now();
for (int i = 0; i < 10000000; i++)
{
RefFunc(shared);
}
std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::high_resolution_clock::now() - time).count() << std::endl;
}
결과
그냥 넘길 때와 참조로 넘길 때 차이가 큰 것을 볼 수 있음
shared_ptr를 Func에 넘길 때 참조 카운트가 1 오름
참조형으로 넘길 때는 오르지 않음
shared_ptr의 참조 카운트가 오를 때 interlocked 하기 때문에 멀티스레드에서도 안전하지만 여러 번 부르면 느려질 수 있음..
사실 저렇게 쓸 일이 많은지는 모르겠음
'개발 > C++' 카테고리의 다른 글
C++ 머지 소트(병합 정렬) 구현해보기 (0) | 2019.06.21 |
---|---|
C++ const 키워드 (0) | 2019.06.09 |
컴파일러 최적화 (0) | 2019.05.13 |
C++ 스마트 포인터 (0) | 2019.05.07 |
C++ Map, HashMap(unorder_map) 사용할 때 주의할 점 (0) | 2019.04.27 |