小编Huf*_*294的帖子

在三元运算符中赋值

使用时std::weak_ptr,最佳实践是使用std::shared_ptrlock()方法访问相应的内容,如下所示:

std::weak_ptr<std::string> w;
std::shared_ptr<std::string> s = std::make_shared<std::string>("test");

w = s;

if (auto p = w.lock())
   std::cout << *p << "\n";
else
   std::cout << "Empty";
Run Code Online (Sandbox Code Playgroud)

如果我想使用三元运算符来简写它,则似乎是这样的:

std::cout << (auto p = w.lock()) ? *p : "Empty";
Run Code Online (Sandbox Code Playgroud)

将是有效的代码,但这不能编译。

是否可以将这种方法与三元运算符一起使用?

c++ conditional-operator

6
推荐指数
1
解决办法
899
查看次数

std::make_shared 导致未定义的行为,但新的作品

考虑以下示例类:

class Foo {

public:
    void* const arr_;

    Foo() = delete;

    Foo(const size_t size, bool high_precision) :
        arr_(Initialize(size, high_precision)) {};

    template <typename T>
    T* GetDataPointer() {
        return (T* const)arr_;
    }
private:
    static void* Initialize(const size_t size, bool high_prec) {
        if (high_prec) {
            return new double[size];
        }
        else {
            return new float[size];
        }
    }

};
Run Code Online (Sandbox Code Playgroud)

当我使用 创建指向 Foo 对象的共享指针时std::make_shared,我经常发现我初始化的数组数据显示未定义的行为/变得损坏。例如:

std::shared_ptr<Foo> sp_foo = std::make_shared<Foo>(Foo(3,false));
    auto foo_data = sp_foo->GetDataPointer<float>();
    foo_data[0] = 1.1;
    foo_data[1] = 2.2;
    foo_data[2] = 3.3;
    std::cout << "First …
Run Code Online (Sandbox Code Playgroud)

c++ memory shared-ptr

1
推荐指数
1
解决办法
526
查看次数

标签 统计

c++ ×2

conditional-operator ×1

memory ×1

shared-ptr ×1