获取错误-
1>C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.25.28610includememory(1143,17): message : could be 'std::shared_ptr<int> &std::shared_ptr<int>::operator =(std::shared_ptr<int> &&) noexcept'
1>C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.25.28610includememory(1132,17): message : or 'std::shared_ptr<int> &std::shared_ptr<int>::operator =(const std::shared_ptr<int> &) noexcept'
1>E:VSHelloWorldHelloWorldmain.cpp(14,10): message : while trying to match the argument list '(std::shared_ptr<int>, int *)'
1>Done building project "HelloWorld.vcxproj" -- FAILED.
#include <iostream>
#include <vector>
#include <algorithm>
#include<string>
#include <memory>
using namespace std;
int main()
{
shared_ptr<int> ptr = make_shared<int>();
int l = 10;
ptr = &l;
cout << (*ptr) << endl;
cin.get();
}
您只能将另一个std::shared_ptr<>
或std::unique_ptr<>
分配给类型为std::shared_ptr<>
的变量,请参阅std::shared_ptr<>::operator=()
的文档。这可以防止您在将指针分配给堆中未分配的变量时出错,就像您在代码中尝试的那样。
请注意,您对std::make_shared<int>()
的调用已经为int
分配了内存,为什么不使用它呢?
std::shared_ptr<int> ptr = std::make_shared<int>();
*ptr = 10;
std::cout << *ptr << 'n';
你甚至可以把它写得更短,避免重复:
auto ptr = std::make_shared<int>(10);
std::cout << *ptr << 'n';
如果您真的想为ptr
分配另一个指针,那么您应该确保该指针也是共享的或唯一的,如下所示:
std::shared_ptr<int> ptr;
std::shared_ptr<int> l;
*l = 10;
ptr = l;
std::cout << *ptr << 'n';