函数 return 应该是新创建的 object 的指针,还是 object 的 unique_ptr?
should a function return the pointer of a newly created object, or a unique_ptr of that object?
我记得几年前看过 Herb Sutter 的会议演讲,试图按照这些思路制定指导方针:
if a function creates a new object on the heap, then it should always return it as a unique_ptr.
当时的想法是这样更安全,intention-revealing。
令我惊讶的是,今天的 CPP 核心指南中似乎缺少此指南。
这个指南有问题吗?已经废弃了吗?
我们应该写这样的函数吗:
MyObject *create(Params p) {
return new MyObject(p);
}
或
unique_ptr<MyObject> create(Params p) {
return make_unique<MyObject>(p);
}
To my surprise, this guideline seems to be missing from the CPP core guidelines today.
此指南是 C++ 核心指南提供的。本准则与工厂函数有关,工厂函数是主要目的是构造和初始化新对象的函数。
请参阅 C.50: Use a factory function if you need “virtual behavior” during initialization 其中指出:
Note The return type of the factory should normally be unique_ptr
by default [...]
它包含在 I11 下的 C++ 核心指南中:
你应该做的是:
MyObject create(Params p) {
return MyObject(p);
}
只有当你绝对需要引用机制时,即当构造一个多态对象并返回一个基数时class,你才应该这样做:
unique_ptr<MyObject> create(Params p) {
return make_unique<MyObject>(p);
}
我记得几年前看过 Herb Sutter 的会议演讲,试图按照这些思路制定指导方针:
if a function creates a new object on the heap, then it should always return it as a unique_ptr.
当时的想法是这样更安全,intention-revealing。
令我惊讶的是,今天的 CPP 核心指南中似乎缺少此指南。
这个指南有问题吗?已经废弃了吗?
我们应该写这样的函数吗:
MyObject *create(Params p) {
return new MyObject(p);
}
或
unique_ptr<MyObject> create(Params p) {
return make_unique<MyObject>(p);
}
To my surprise, this guideline seems to be missing from the CPP core guidelines today.
此指南是 C++ 核心指南提供的。本准则与工厂函数有关,工厂函数是主要目的是构造和初始化新对象的函数。
请参阅 C.50: Use a factory function if you need “virtual behavior” during initialization 其中指出:
Note The return type of the factory should normally be
unique_ptr
by default [...]
它包含在 I11 下的 C++ 核心指南中:
你应该做的是:
MyObject create(Params p) {
return MyObject(p);
}
只有当你绝对需要引用机制时,即当构造一个多态对象并返回一个基数时class,你才应该这样做:
unique_ptr<MyObject> create(Params p) {
return make_unique<MyObject>(p);
}