A. void Print(std::unique_ptr<MyClass> obj); B. void Print(const std::unique_ptr<MyClass>& obj); C. void Print(std::shared_ptr<MyClass> obj); D. void Print(const MyClass& obj);
时间: 2024-04-10 18:29:52 浏览: 240
A. `void Print(std::unique_ptr<MyClass> obj);`: 这个函数接受一个 `std::unique_ptr<MyClass>` 类型的参数 `obj`。这意味着在函数内部,`obj` 是独占指针,它拥有对 `MyClass` 对象的唯一所有权。当函数调用结束时,`obj` 将会被销毁并释放内存。
B. `void Print(const std::unique_ptr<MyClass>& obj);`: 这个函数接受一个指向 `std::unique_ptr<MyClass>` 类型的常引用 `obj`。通过使用常引用,函数可以避免对 `obj` 进行拷贝构造,同时保证对 `obj` 的访问是只读的。这种方式适用于不需要修改对象内容的情况。
C. `void Print(std::shared_ptr<MyClass> obj);`: 这个函数接受一个 `std::shared_ptr<MyClass>` 类型的参数 `obj`。`std::shared_ptr` 是一个引用计数智能指针,它可以被多个指针共享所有权。函数内部使用时,可以通过增加引用计数来保持对象的生命周期,并在引用计数为零时自动释放内存。
D. `void Print(const MyClass& obj);`: 这个函数接受一个指向 `MyClass` 类型的常引用 `obj`。通过使用常引用,函数可以避免对 `obj` 进行拷贝构造,同时保证对 `obj` 的访问是只读的。这种方式适用于不需要修改对象内容的情况,但是不涉及智能指针的所有权管理。
相关问题
void Print(const std::unique_ptr<MyClass>& obj);
这是一个函数声明,函数名为Print,参数为一个类型为std::unique_ptr<MyClass>的引用。std::unique_ptr是C++11中引入的智能指针类,用于管理动态分配的对象的生命周期。MyClass是一个自定义的类类型。该函数接受一个std::unique_ptr<MyClass>类型的参数并将其作为常量引用,这意味着函数内部不会修改该参数所指向的对象。
[[nodiscard]] shared_ptr<const _Ty> shared_from_this() const{ return shared_ptr<const _Ty>(_Wptr) }
这段代码片段是在C++标准库中的智能指针`std::shared_ptr`内部的一个成员函数`shared_from_this()`的实现。`shared_from_this()`是一个用于获取当前对象自身引用的方法,当被其他已经持有该对象引用的共享所有权容器(如`shared_ptr`)所持有时。这里`_Ty`代表指向的对象类型,`const`说明返回的是常量引用。
函数返回了一个`shared_ptr<const _Ty>`类型的临时引用,即一个指向常量对象的共享所有权指针。这个方法的作用是在不需要传递原始对象的情况下,让外部拥有者能够间接访问并控制这个对象,同时保证了线程安全。
示例使用:
```cpp
class MyClass {
public:
std::shared_ptr<const MyClass> shared_from_this() const {
return shared_ptr<const MyClass>(static_cast<MyClass*>(this));
}
};
MyClass obj;
auto shared_ref = obj.shared_from_this();
```
阅读全文