【发布时间】:2018-12-28 19:44:15
【问题描述】:
以下内容无效:
#include <memory>
#include <iostream>
typedef double zip[10];
int main()
{
std::unique_ptr<zip> s = std::make_unique<zip>();
(*s)[0] = 2.0;
std::cout << (*s)[0] << std::endl;
return 0;
}
但以下是完全有效的:
int main()
{
std::shared_ptr<zip> s = std::make_shared<zip>();
(*s)[0] = 2.0;
std::cout << (*s)[0] << std::endl;
return 0;
}
为什么会出现差异?我错过了什么?
【问题讨论】:
-
不是你问的,但是
unique_ptr到double[10]的正确语法是auto s = std::make_unique<double[]>(10);。 -
您的第一个代码也适用于
typedef std::array<double, 10> zip;。