emscripten-core / emscripten-core/emscripten
val::array doesn't take ownership of std::vector items
- Dominant language
- C++
- Stars
- 27.6k
- Forks
- 3.6k
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 105
Description
I think there is a bug in how `val` takes or does not take ownership of the passed in C++ value. Consider main.cpp:
```
#include
#include
using namespace emscripten;
struct Foo {
~Foo() {
std::cout << "Destruct!" << std::endl;
}
};
val getFoos() {
std::vector> vec { std::make_shared() };
return val::array (vec);
}
val getFoos2() {
std::vector> vec { std::make_shared() };
std::vector valVec (vec.begin(), vec.end());
return val::array (vec);
}
EMSCRIPTEN_BINDINGS(Foo) {
class_("Foo")
.smart_ptr>("Foo");
function("getFoos", getFoos);
function("getFoos2", getFoos2);
}
```
and main.js:
```
console.log("getFoos");
Module.getFoos ();
console.log("getFoos2");
Module.getFoos2 ();
```
This prints
```
getFoos
Destruct!
getFoos2
```
In my understanding it shouldn't print Destruct! at all.
**Version of emscripten/emsdk:**
```
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.5 (d33328b22db1aa62a51c50731e9645951a2038bc)
clang version 15.0.0 (https://github.com/llvm/llvm-project f3bc7fd5465a3a919388b6a0307553ef4a6d39c9)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: /Volumes/SSD/git/emsdk/upstream/bin
```
Contributor guide
Assessment
This issue has not been assessed yet.