KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Consider this code : #include <memory> #include <iostream> class SomeClass { public: SomeClass() { std::cout << "SomeClass()" << std::endl; } ~SomeClass() { std::cout << "~SomeClass()" << std::endl; } void* operator new(std::size_t size) { std::cout << "Custom new" << std::endl; return ::operator new(size); } void operator delete(void* ptr, std::size_t size) { std::cout << "Custom delete" << std::endl; ::operator delete(ptr); } }; int main() { std::shared_ptr<SomeClass> ptr1(new SomeClass); std::cout << std::endl << "Another one..." << std::endl << std::endl; std::shared_ptr<SomeClass> ptr2(std::make_shared<SomeClass>()); std::cout << std::endl << "Done!" << std::endl << std::endl; } Here is its output: Custom new SomeClass() Another one... SomeClass() Done! ~SomeClass() ~SomeClass() Custom delete Clearly, std::make_shared() didn't call the new operator -- it's using a custom allocator. Is this the standard behavior for std::make_shared() ?
Tags (comma-separated)
Save Edits
Cancel