目前我即将熟悉 C++11 的特性。我自发喜欢的一件事是智能指针,尤其是shared_ptr
. 但是,它似乎不允许将普通指针分配给 shared_ptr,即。例如
typedef shared_ptr<string> StringPtr
...
StringPtr x;
...
x = new string("bla");
失败,至少在 VC2010 中,当查看shared_ptr::operator=
缺少模板参数类型的普通指针重载的接口时,我当然可以理解这一点。现在我可以shared_ptr
通过显式使用构造函数从普通指针创建一个shared_ptr
,即
x = StringPtr(new string("bla"));
但在我看来,这是多余且违反直觉的。我认为在将普通指针分配给智能指针时,我已经尽可能地表达了我的编程意图。任何额外的语法都会降低可读性,而不会获得太多的清晰度。当然,由我决定不要将已经“拥有”的普通指针分配给智能指针,但那又怎样......
在尝试恢复可读性时,我偶然发现了make_shared<>
. 但话又说回来了
x = make_shared<string>("bla");
并不比上面的智能指针的显式构造更具可读性和紧凑性。当然性能可能会好一点,但这不是我所追求的。所以我的意图是实例化函数模板 make_shared 并为其设置别名,就像我为 shared_ptr 所做的那样。但显然
typedef make_shared<string> NewString
根本无效。所以我的问题是:我怎样才能最接近写类似的东西
x = NewString("bla");
?