summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorTyge Løvset <[email protected]>2021-09-24 07:08:56 +0200
committerTyge Løvset <[email protected]>2021-09-24 07:08:56 +0200
commit23f5994392dc3a3ad4a1b680f4453cba21e632eb (patch)
tree780da8dab0df64db344558d3f0a698df10826d18
parent9f2cf3080ee03346cfe0e13b34505b1fd017fbe6 (diff)
downloadSTC-modified-23f5994392dc3a3ad4a1b680f4453cba21e632eb.tar.gz
STC-modified-23f5994392dc3a3ad4a1b680f4453cba21e632eb.zip
Reworked csptr docs. Made static members to inline (ccommon.h).
-rw-r--r--docs/csptr_api.md15
-rw-r--r--examples/sptr_ex.c9
-rw-r--r--include/stc/ccommon.h4
3 files changed, 17 insertions, 11 deletions
diff --git a/docs/csptr_api.md b/docs/csptr_api.md
index d1157162..7b44e4c1 100644
--- a/docs/csptr_api.md
+++ b/docs/csptr_api.md
@@ -24,13 +24,20 @@ See the c++ classes [std::shared_ptr](https://en.cppreference.com/w/cpp/memory/s
#define i_valdel // destroy value func - defaults to empty destruct
#include <stc/csptr.h>
```
-`X` should be replaced by the value of `i_tag` in all of the following documentation. When declaring a container with shared pointers, define the `i_val_csptr` with the csptr's `i_tag`. See example below.
+`X` should be replaced by the value of `i_tag` in all of the following documentation.
-## Methods
+The *csptr_X_compare()*, *csptr_X_del()* methods are defined based on the `i_cmp` and `i_valdel`
+macros specified. Use *csptr_X_clone(p)* when sharing ownership of the pointed-to object.
+
+When declaring a container with shared pointers, define the `i_val_csptr` with the csptr's `i_tag`.
+See example.
-The *csptr_X_compare()*, *csptr_X_del()* methods are defined based on the `i_cmp` and `i_valdel` macros specified.
+Also for containers, make sure to pass the result of *csptr_X_make()* to *insert*, *push_back*,
+or *push*, and not an *emplace* function. The *csptr_X_make()* method creates a **csptr** with
+use-count 1, and *emplace* will ***clone*** it and increase the count, causing a memory leak. Use
+*emplace* functions when sharing **csptr**s between containers or other existing shared pointers.
-Use *csptr_X_clone(p)* when sharing ownership of the pointed-to object. For shared pointers stored in containers, define `i_val_csptr` to the shared pointers tag instead of a `i_val` macro. See example below.
+## Methods
```c
csptr_X csptr_X_init(); // empty constructor
csptr_X csptr_X_make(i_val val); // make_shared constructor, like std::make_shared()
diff --git a/examples/sptr_ex.c b/examples/sptr_ex.c
index 4a0397ec..290833ff 100644
--- a/examples/sptr_ex.c
+++ b/examples/sptr_ex.c
@@ -38,14 +38,13 @@ void Song_del(Song* s) {
void example3()
{
- c_auto (cvec_song, v, v2) {
- csptr_song songs[] = {
+ c_auto (cvec_song, v, v2)
+ {
+ c_apply(cvec_song, push_back, &v, {
csptr_song_make(Song_from("Bob Dylan", "The Times They Are A Changing")),
csptr_song_make(Song_from("Aretha Franklin", "Bridge Over Troubled Water")),
csptr_song_make(Song_from("Thalia", "Entre El Mar y Una Estrella"))
- };
- c_forrange (i, c_arraylen(songs))
- cvec_song_push_back(&v, songs[i]);
+ });
c_foreach (s, cvec_song, v)
if (!cstr_equalto(s.ref->get->artist, "Bob Dylan"))
diff --git a/include/stc/ccommon.h b/include/stc/ccommon.h
index 2a1bea72..919194a8 100644
--- a/include/stc/ccommon.h
+++ b/include/stc/ccommon.h
@@ -45,8 +45,8 @@
# define STC_LIBRARY_ONLY(...) __VA_ARGS__
# define STC_STATIC_ONLY(...)
#else
-# define STC_API static
-# define STC_DEF static
+# define STC_API static inline
+# define STC_DEF static inline
# define STC_LIBRARY_ONLY(...)
# define STC_STATIC_ONLY(...) __VA_ARGS__
#endif