我有这门课:
class A
{
public:
A(std::shared_ptr<SomeClass> p);
private:
std::shared_ptr<SomeClass> _p;
};
class B
{
public:
B(std::shared_ptr<SomeClass> p);
private:
std::shared_ptr<SomeClass> _p;
};
class Foo
{
public:
Foo();
private:
A _a;
B _b;
};
假设我的B班是这样的:
class B {
B (double d,double e)
private:
std::shared_ptr < class A > sp;
}
A类的构造器看起来如下:
A(double a, double b){...};
现在,我想为B类编写构造函数,在B类中,使用上面编写的构造函数构造来自A类的对象(初始化或分配)。有人能解释一下我怎么能专业地做这件事吗?我尝试了如下所示,但是我得到了一些错误,比如"term不计算到接受1参数的函数“和”初始化程序列表在这种情况下是意外的“.
class B (double d, double e){
d
我正在尝试将共享指针添加到我的初始化列表中。这个指针已经在我的头文件中声明了。一旦我将它添加到列表中,编译器就会用error: no matching function for call to std::shared_ptr<memory::Mmu>::shared_ptr(std::shared_ptr<Cartridge>&)输出错误
头文件:
class Gameboy {
public:
Gameboy(std::vector<uint8_t>);
void run();
private:
我有以下代码:
class A {
public:
A(std::vector<std::shared_ptr<int>>){}
};
auto x = std::make_shared<int>(0);
auto y = std::make_shared<int>(1);
auto list = {x, y};
auto res = std::make_shared<A>({x, y});
在这个示例中,如果我传递给res变量列表,它会编译,否则,
我有一个shared_ptr<Tree> tree和一个shared_ptr<TreeNode> node,其中包含了作为共享指针的儿童列表。
class TreeNode
{
protected:
std::weak_ptr<TreeNode> parent;
/**
A list containing the children of this node
*/
std::shared_ptr<std::vector<std::shared_ptr<TreeEdge>>> chil
我发现语法有编译错误。
std::shared_ptr<int> p = new int(5);
31 41 E:\temprory (delete it if u like)\1208.cpp [Error] conversion from 'int*' to non-scalar type 'std::shared_ptr<int>' requested
但这是可以的
std::shared_ptr<int> p(new int(5));
与unique_ptr相同;
但是我不知道为什么它是被禁止的。
#include <iostream>
#include <memory>
class Base
{
public:
Base() {}
};
class Derived : public Base
{
public:
Derived() {}
Derived(std::initializer_list<std::pair<int, std::shared_ptr<Base>>>) {}
};
int main(int argc, char ** argv)
{
auto example = ne
假设我有A类和两个派生类B和C,例如:
#include <iostream>
#include <list>
#include <string>
using namespace std;
class A {
public:
virtual void poke() const = 0;
virtual ~A() {};
};
class B : public A {
string _response;
public:
B(const string& response) : _response(response) {}
voi
将同一指针发送到两个不同的shared_ptr中是不好的,它会导致双重释放,如下所示:
int* p = new int;
std::shared_ptr<int> p1(p);
std::shared_ptr<int> p2(p); // BAD
您可以使用std::enable_shared_from_this实现相同的目的
class Good: public std::enable_shared_from_this<Good>
{
public:
std::shared_ptr<Good> getptr() {
r
我正在使用VisualStudio2019学习std::share_pointer,我编写了一个程序,实现了两个整数的交换。
#include <iostream>
#include <memory>
void swap0(int* a, int* b)
{
int t = *a;
*a = *b;
*b = t;
}
void swap1(std::shared_ptr<int> a, std::shared_ptr<int> b)
{
int t = *a;
*a = *b;
*b = t;
当我想将具有智能指针类型的成员变量添加到类时,我发现它无法在声明位置初始化:
class Foo {
public:
std::shared_ptr<int> intSharedPtr = new int; // not ok
Foo() {}
};
但我能做到:
class Foo {
public:
std::shared_ptr<int> intSharedPtr; // ok
int* intPtr = new int; // ok
Foo() {
intSharedPtr.reset(new int);
}
};
似乎智