是的,有可能使unique_ptr
适用于普通C++。以下是如何将unique_ptr
与C++一起使用的建议:
std::make_unique
:对于大多数情况,你可以使用std::make_unique
来创建一个unique_ptr
。这个工厂函数可以确保正确地初始化unique_ptr
,并在构造时执行所有必要的内存分配和析构。#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
std::cout << "Value: " << *ptr << std::endl;
return 0;
}
memory
头文件:要使用unique_ptr
,请确保包含<memory>
头文件。#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
std::cout << "Value: " << *ptr << std::endl;
return 0;
}
std::unique_ptr
是std::shared_ptr
的基类。如果你的应用需要使用shared_ptr
,可以这样做:#include <iostream>
#include <memory>
int main() {
std::shared_ptr<int> ptr = std::make_shared<int>(42);
std::cout << "Value: " << *ptr << std::endl;
return 0;
}
memory
头文件:要使用unique_ptr
或shared_ptr
,请确保包含<memory>
头文件。#include <iostream>
#include <memory>
int main() {
std::unique_ptr<int> ptr = std::make_unique<int>(42);
std::cout << "Value: " << *ptr << std::endl;
return 0;
}
std::move
和std::forward
:std::unique_ptr
支持std::move
和std::forward
,允许你将unique_ptr
的值移动或转发给其他unique_ptr
。#include <iostream>
#include <memory>
class MyClass {
public:
MyClass() { std::cout << "Constructor" << std::endl; }
~MyClass() { std::cout << "Destructor" << std::endl; }
};
int main() {
std::unique_ptr<MyClass> obj_ptr = std::make_unique<MyClass>();
// Move obj_ptr to a new unique_ptr
std::unique_ptr<MyClass> new_obj_ptr = std::move(obj_ptr);
// Forward obj_ptr to another unique_ptr
std::unique_ptr<MyClass> another_obj_ptr = std::forward<std::unique_ptr<MyClass>>(obj_ptr);
return 0;
}
以上示例展示了如何将unique_ptr
用于普通C++代码。
领取专属 10元无门槛券
手把手带您无忧上云