Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why shared_ptr has an explicit constructor

I was wondering why shared_ptr doesn't have an implicit constructor. The fact it doesn't is alluded to here: Getting a boost::shared_ptr for this

(I figured out the reason but thought it would be a fun question to post anyway.)

#include <boost/shared_ptr.hpp>
#include <iostream>

using namespace boost;
using namespace std;

void fun(shared_ptr<int> ptr) {
    cout << *ptr << endl;
}

int main() {
    int foo = 5;
    fun(&foo);
    return 0;
}

/* shared_ptr_test.cpp: In function `int main()':
 * shared_ptr_test.cpp:13: conversion from `int*' to non-scalar type `
 *  boost::shared_ptr<int>' requested */
like image 413
cdleary Avatar asked Dec 17 '22 10:12

cdleary


1 Answers

In this case, the shared_ptr would attempt to free your stack allocated int. You wouldn't want that, so the explicit constructor is there to make you think about it.

like image 152
cadabra Avatar answered Jan 06 '23 08:01

cadabra