【发布时间】:2021-03-07 00:56:32
【问题描述】:
#include <iostream>
#include <vector>
class TestX {
public:
int i;
TestX(int inp1) : i(inp1){}
};
using Test = std::shared_ptr<TestX>;
int main()
{
Test a(4);
std::cout << a->i << std::endl;
}
我想隐藏我正在使用共享指针,并让它看起来像我只有一个普通类。原因是我的对象永远不会被复制是很重要的,但我仍然希望用户能够使用{obj1, obj2} 创建一个向量。有没有办法像有构造函数一样初始化 Test 对象,还是我必须使用make_shared 来初始化它?
【问题讨论】:
-
喜欢?
auto Test(int val) { return std::make_shared<TestX>(val); }然后auto a = Test(4);但我不确定你所说的“隐藏”是什么意思。 -
我相信添加 ` auto Test(int val) { return std::make_shared
(val); }` 会和我的 typedef 冲突吗?这意味着任何接受 Test 作为参数的函数都必须写出 std::shared_ptr<TestX>。 -
然后调用函数
TestMake? -
还有std::enable_shared_from_this 但是我不确定你在找什么...
-
那么,我要问了,如果没有人可以使用共享指针,为什么还要使用它?
标签: c++ typedef smart-pointers